分布式版本控制软件水银(Mercurial)使用指南1

Ground Up Mercuial

翻译自:http://hginit.com/01.html

即使你只是一个人在战斗,你也应当使用水银来得到版本控制的诸多好处。此教程会展示将一个文件夹交由水银管理是多么地容易,你可以因此而方便地跟踪软件的旧版本。

水银是一个版本控制系统。开发者用它来管理源代码。用它的目的主要有两个:

  1. 它跟踪旧版本的每一个文件。
  2. 它可以合并不同版本的代码。因而团队成员可以各自独立地工作,然后把他们所作出的改变合并到一起。

如果没有水银,你可能需要复制一大堆文件夹来保存你的旧版本:

分布式版本控制软件水银(Mercurial)使用指南1_第1张图片
多个copy版本

这样做会占据很多磁盘空间,并且过段时间你就搞不清楚哪个是哪个了。使用版本控制器可以很好地解决这个问题。

大多数人使用命令行来管理水银,它在Windows, Unix和Mac平台上都适用。水银的命令为hg:

分布式版本控制软件水银(Mercurial)使用指南1_第2张图片
用命令行使用水银

仅仅输入hg,你会得到一个常用命令的列表。你也可以输入hg help来获得一份更为详尽的列表。

为了使用版本控制,你需要一个repository(仓库)。仓库里保存了你所有文件的历史版本。为了节约硬盘空间,它并没有真的去保存每一个历史版本——它只是保存了版本之间的差异。

在以前,建一个仓库是一件大事。你需要一个中央服务器,并且在上面装软件。然而水银是分布式的,你不需要建什么中央服务器。你完全可以就在个人计算机上使用它。而且建一个仓库超级容易:你只需要进入代码的顶层目录……

分布式版本控制软件水银(Mercurial)使用指南1_第3张图片
进入顶层目录

……,然后输入hg init

分布式版本控制软件水银(Mercurial)使用指南1_第4张图片
创建一个水银的仓库

等等,好像什么事也没有发生?然而,如果仔细瞧一瞧,你会发现多了一个叫.hg的新目录:

分布式版本控制软件水银(Mercurial)使用指南1_第5张图片
多了一个.hg目录

那就是仓库!那是一个装满着水银所需的所有文件的目录。里面有一些设置,有文件的历史版本,有标签tags,还有备份,等等。记住这句忠告吧:不要修改里面的任何东西。你也不需要与这个文件夹直接打交道。

好了,我们现在有了一个新的仓库。我们想要把一些源代码添加进去。很简单,输入hg add

分布式版本控制软件水银(Mercurial)使用指南1_第6张图片
添加文件

还需要一个步骤…你需要提交变更。什么变更?变更就是:你添加了那么多的文件。

你为什么需要提交?用水银的时候,提交就好比是说:“嘿,请你记住现在这样的文档布局和内容。”这就好像是拷贝了一下整个文件夹…每一次你改变了一些内容,你就可以commit一下。

提交变更

水银会弹出一个编辑器,从而你可以输入一些提交信息。这些信息只是为了提醒你自己,这次提交作了哪些改变。

分布式版本控制软件水银(Mercurial)使用指南1_第7张图片
记录变更

当你保存并退出,你的文件就被提交了。

你可以输入hg log来看一看历史变更。这就像你的仓库的部落格。

分布式版本控制软件水银(Mercurial)使用指南1_第8张图片
查看历史变更

现在不如再来编辑一个文件,看看会发生什么。

分布式版本控制软件水银(Mercurial)使用指南1_第9张图片
变更一个文件

现在我们又作了另外一个变更,我们可以用hg commit来提交。

分布式版本控制软件水银(Mercurial)使用指南1_第10张图片
提交变更

看,水银能够知道只有一个文件,a.txt被改变了:

分布式版本控制软件水银(Mercurial)使用指南1_第11张图片
显示变更

提交过后,我们再来看看log:

分布式版本控制软件水银(Mercurial)使用指南1_第12张图片
此时的log

就像任何现代的部落格一样,水银把最新的事件放在最上面。

再来一次变更:

分布式版本控制软件水银(Mercurial)使用指南1_第13张图片
再次变更一个文件

提交:

提交变更

提交信息:

分布式版本控制软件水银(Mercurial)使用指南1_第14张图片
提交信息

现在的log:

分布式版本控制软件水银(Mercurial)使用指南1_第15张图片
现在的log

OK。到现在为之,我做了一些变更。而且每当我作出一个重要的变更之后,我都会把它提交到仓库中去。

我知道你在想些什么。你在想,“JOEL, 这简直在浪费时间!”为什么一个提交讲这么久!真是懒婆娘的裹脚布!

请耐心一点,年轻人!你马上就会学到如何从提交中得到好处。

首先,比如说你在编辑的时候犯了点错。

分布式版本控制软件水银(Mercurial)使用指南1_第16张图片
文件编辑出错了

然后,天呐,你删了一些非常重要的文件。

分布式版本控制软件水银(Mercurial)使用指南1_第17张图片
又误删了一些文件

【此处有原作者的小故事。因与主题关系不大,略过……】

感谢水银,当你对自己的改变不满时,你可以输入hg revert。水银会把你的目录里的所有东西恢复到最后一次提交时的样子。

分布式版本控制软件水银(Mercurial)使用指南1_第18张图片
水银来帮你恢复

之所以使用参数--all是因为想要把所有的文件都回滚到它们的初始状态上。

因此,当你使用水银管理你的源代码时,你可以:

  1. 做一些变更
  2. 看它们是否正确有效
  3. 如果是,则commit它们
  4. 如果不是,则revert它们
  5. GOTO 1

(我知道,我一会儿用Windows的CMD界面,一会儿又用GOTO语句,一定会招来你们的不满与吐槽。)

随着时间的流逝,你可能不记得每个版本都具体做过哪些变化。不过不要紧,水银替你跟踪了。你只需要输入hg status,水银就会给你显示你改变过的文件。

假设我首先创建了一个文件,然后编辑了一个文件,最后删除了一个文件。

分布式版本控制软件水银(Mercurial)使用指南1_第19张图片
显示改变过的文件

hg status将你改变的任何一个文件都显示出来。“M”表示“更改”——文件被修改过了。“!”表示丢失——文件本来应该在的,可现在却没了。“?”表示不知道——水银对那个文件现在还一无所知。

我们一个一个来看。那个更改了的文件,a.txt。更改了什么?你可能已经忘了。有一个命令可以帮助你:hg diff。它会告诉你从上一次的提交到现在,文件作了哪些变化。

分布式版本控制软件水银(Mercurial)使用指南1_第20张图片
跟上一次提交相比当前的变化

这种格式似乎有一点神秘,但最让人感兴趣的部分是:如果那块看到一些行前面有一个减号,表示它们被删除了;一些行前面有一个加号,则表明这些行被添加了。所以上面的例子中,“Normal people”被编辑成了“Civilians”。

现在来看那个遗失的文件,favicon.ico。像之前说的那样,如果你并不想删除它,则可以使用hg revert;如果你真的要删除它的话,你需要告诉水银:

分布式版本控制软件水银(Mercurial)使用指南1_第21张图片
删除文件

“R”表示“Removed”。因此下次commit的时候,这个文件将被删除。最后,我们需要加上新的文件,b.txt

分布式版本控制软件水银(Mercurial)使用指南1_第22张图片
添加文件

“A”表示“Added。”你有没有发现我已经懒得把hg status打全了?水银只需要足够多的可以区分的字母。而以st打头的也只有这一条命令而已。

把所有的?和!都解决了之后,就可以继续commit了。

分布式版本控制软件水银(Mercurial)使用指南1_第23张图片
提交变更

关于hg log还有一件事:变更集(changeset)那一行显示了一个数字……实际上是两个数字。一个简单的,比如“0”来表示最初的版本。还有一串长的,十六进制的数字你可以暂时忽略。

记住,水银保存了足够的信息,可以来重构任何一个历史版本。

首先,一个简单的命令hg cat可以被用来打印某个文件的任何历史版本。
例如,我们可以看看a.txt现在长什么样子。

分布式版本控制软件水银(Mercurial)使用指南1_第24张图片
查看文件当前的内容

如果想看它过去的样子,可以加一个-r("revision")参数:

分布式版本控制软件水银(Mercurial)使用指南1_第25张图片
查看文件在某个版本时的内容

如果文件很长,很复杂,并且其实至改变了一点点。那我们可以使用hg diff带上-r参数来查看两个版本之间的差异在什么地方。

分布式版本控制软件水银(Mercurial)使用指南1_第26张图片
查看两个版本间的差异

最后,在你快达到你看一篇文章的身体极限之前,我还想告诉你一件小事:你可以使用hg update这个命令来到达你想要的任何一个版本。

分布式版本控制软件水银(Mercurial)使用指南1_第27张图片
到达指定的版本

如果不带任何参数,则hg update会更新到最新的版本。

自测

OK! 此为教程1。下面是你应当已经掌握的知识:

  1. 创建一个仓库
  2. 在仓库中添加或删除文件
  3. 当做了变更,看看有哪些没有提交的变更,然后
  4. 如果你觉得这些变更还不错,就commit
  5. 如果你觉得这些变更不行,就revert
  6. 查看文件的旧版本,并让自己的工作目录可以update成任何一个版本。

你可能感兴趣的:(分布式版本控制软件水银(Mercurial)使用指南1)