版本控制


版本控制软件允许你跟踪代码的更改,还能轻松地回溯这些变化、分享你的开发成果及其它更多东西。即使你不想对Evennia本身的建设做贡献而只想用Evennia开发自己的MU类游戏,在工作中使用版本控制系统也是一个好主意(及实际的标准编码方式)。想要对版本控制有概念性的了解,可以从这里的维基百科文章开始。请注意,本页中使用的是Linux操作系统的命令,下面的步骤可能和其他系统不同,不过也会提供针对其它系统的链接。

想要得到更多关于使用Git的帮助,请参考Github的官方文档


设置Git

如果你已经安装了Evennia,应该就已经装好Git了,可以跳到下面的步骤2。否则,你需要在你的平台上安装Git。你可以在这里查看更多关于安装的信息。

第一步:安装Git
  • Fedora Linux系统
  • yum install git-core
    
  • Debian Linux系统(Ubuntu、Linux Mint等)
  • apt-get install git
    
  • Windows:建议使用Windows版的Git

  • Mac:Mac平台提供了两种安装方式,一是通过MacPorts,你可以在这里了解详情;也可以使用Git的OSX安装程序

第二步:设置Git用户/邮箱
为了避免以后出现常见问题,你需要做两项设置;首先你需要告诉Git你用户名,然后是e-mail地址,这样在你以后提交代码时,你会被妥善记入。
  1. 设置提交git时使用的默认名字:
  2. git config --global user.name "这里写你的名字"
    
  3. 设置提交git时使用的默认email:
  4. git config --global user.email "你的email@举例.com"
    


从Evennia建立分支


第一步:从 evennia/master 仓库建立分支
在继续下面的步骤之前,请确保你已注册并在Github.com上创建了一个帐户。如果你想要创建Evennia主仓库的分支并把你的更改提交到分支(无论为你自己还是为了促进Evennia的发展),这是必须的。

分支是主仓库的克隆,你可以自己提交和修改。如下图所示,在此页面的顶部点击“Fork”按钮。


第二步:克隆你的分支
分支只存在于网上。在终端上将你的当前目录移动到你想要做开发的地方,在这个目录中运行以下命令:
git clone https://github.com/yourusername/evennia.git
这会将分支下载到你的计算机,会在你当前的位置创建新文件夹 evennia/。

第三步:配置远程仓库
远程仓库是存储在另一台计算机上的仓库,在当前的例子中是GitHub的服务器。当一个仓库被克隆,它有一个默认的远程仓库称为origin,它指向你在GitHub上的分支而不是建立分支的原始仓库。为了轻松地跟踪原始仓库(即 Evennia的官方仓库),你需要添加另一个远程仓库,这个远程仓库的标准名称是“upstream” 。

下面我们将当前目录移动到新克隆的“evennia”目录,然后将原始的Evennia仓库分配到名为“upstream”的远程仓库:
cd evennia
git remote add upstream https://github.com/evennia/evennia.git


在你的分支上工作


建立工作分支
分支是你代码的一个单独实例,你在一个分支中修改的代码不会影响到其它分支。人们可以在分支之间随意切换,在指定的项目中想创建多少分支就能创建多少分支,分支的内容也可以合并在一起。这不仅是组织团队开发的常用方法,而且能用来测试新功能同时避免把原有的程序代码弄乱。

Git的默认分支称为“master”分支。我们让主分支成为“干净”的Evennia安装分支 —— 这是一个很好的实用调试方式,因为它可以让我们知道,你发现错误是由于你自己的更改,还是在核心服务器存在同样的错误。我们将在另一个分支上开发我们的游戏,称之为“mygame”。
git checkout -b mygame
这个命令将在你的机器上签出并自动创建新的分支mygame。使用 git branch 命令你可以看到你正在使用的是哪个git分支,使用 git checkout <分支名> 命令可以在不同分支间切换。在你自己的分支,你现在可以编写代码、添加和编辑你心中所想的内容、构建你的游戏梦想。

建立Evennia-fixes分支
如果你想为修改Evennia自身的代码做贡献,将它与你自己的游戏分隔开是一个好主意。这让Evennia的开发者可以只拉取相关的变化。为此我们只需创建一个“myfixes”分支:
git checkout -b myfixes

跟踪文件
当你在本地分支上编写自己的代码时,你很可能想要定义新的命令、经济系统、创建批处理文件或其它你想要的东西。如果你创建新的文件,你必须使用add命令来告诉Git跟踪它们:
git add <文件名>
您可以使用 git status 命令检查版本控制的当前状态,你的任何修改、添加或其他更改都会显示出来。有些文件,如数据库文件、日志文件和临时的PID文件通常不被版本控制跟踪,在他们面前会有一个问号。

提交代码
经常提交你的修改是个好主意。提交速度很快,而且只能提交在本地 —— 从这方面说,你永远无法将任何东西提交上线。这给你当前的工作“保存”了一个快照,你可以在任何时候回溯回去。要提交你的更改,请使用
git commit --all
这将保存你上次提交后的所有更改。该命令会打开一个文本编辑器,你可以添加一条消息详细说明你所做的更改,信息应该简短且内容充实。你可以通过 git log 命令查看历史提交。如果你不想使用文本编辑器,你可以通过使用 -m 标志来直接添加消息:
git commit --all -m "这修复了战斗代码中的一个bug"

你改主意了
如果你想抛弃掉一些你没有提交过的更改,你可以执行以下操作:
git checkout <想要恢复原状的文件>
这会将文件恢复到你最后一次提交时的状态,抛弃掉此后你对这个文件所作的修改。如果你使用 git checkout . 你会抛弃掉自上次提交后的所有修改。

跟着上游变化
当Evennia的官方仓库更新了,首先要确保将你所有的更改都提交到你的分支,然后签出“干净”的master分支:
git commit --all
git checkout master
从上游拉取最新的变化:
git pull upstream
这会将你的master分支更新到最新的Evennia版本。现在回到我们自己的工作分支,合并更新后的master分支到我们的分支。
git checkout mygame
git merge master
如果一切顺利,你的mygame分支现在将包含Evennia的最新版本。想要同时更新你的myfixes分支只需要做:
git checkout myfixes
git merge master
使用 git log 命令查看更改了些什么。你可能需要重启服务器,如果数据库模式改变了,需要执行 manage.py migrate(这会显示在提交日志和邮件列表中)。看Git的使用说明以更多地了解有用的常用命令以及特殊情况,如处理合并冲突。

公开分享自己的代码
到目前为止,你的mygame和myfixes分支只存在于你的本地计算机上,没有别的人能看到它们。如果你希望这些分支的副本也出现在你github的在线分支中,首先确定已经签出了你的“mygame”分支,然后运行以下命令:
git push -u mygame
这将在你的在线仓库中建立一个命名为“mygame”的新远程分支。此后,你就可以在你的 mygame 分支中使用 git push 命令将更改推送到网上。这是一个让你的代码保持备份和可访问的好方法。但请记住,除非你已在Github上花钱购买了“私人”仓库,每个人将能够浏览、下载你的代码(和你使用Evennia一样)。

提交对Evennia的修正
比如你发现了Evennia的bug,希望对修正做出贡献,我们假定你已经按前面所述的内容设置了本地仓库,假定你做的修改在“myfixes”分支上(你也可以考虑给你想贡献的每个部分都建立一个新分支并用适当的名字命名)。

首先提交你在其他地方做的更改,然后更新master分支和你的“myfixes”分支到最新的evennia版本:
git checkout master
git pull upstream
git checkout myfixes
git merge master
现在你修正及测试你“myfixes”分支里的东西,然后这样提交:
git commit --all -m "This fixes issue #124."
请确保提交的说明信息始终是简单明了的,这样一下就能看出你的意图是什么。你可以在工作中提交任意多次。一旦你决定要向全世界展示你做了些什么,你可以把到目前为止所提交的全部更改都推送到你在线克隆仓库的新远程分支:
git push -u myfixes

这只需要做一次。如果之前你已经创建了远程分支,你只需要进入你的“myfixes”分支,执行 git push 命令。

接下来你需要告诉Evennia的开发者,他们应该将你的伟大修改正确合并进Evennia。创建pull请求,并按照说明进行操作。一定要明确选择你的myfixes分支作为合并的来源,然后Evennia的开发人员就能检查你的请求,如果是合适的就会合并它。

私下分享你的代码
创建一个在网上公开可见的克隆仓库可能不是你在开发过程中想要的 —— 当你想和你的团队共享你的革命性工作时,你可能会喜欢更私人的空间。

GitHub提供私人仓库,但要收费;或者你可以将代码传到BitBucket上,它提供免费的私人仓库,只要你的开发团队别太大就行了。


(原文:https://github.com/Evennia/evennia/wiki/Version Control    翻译:卢铱俊)