原文地址:http://mercurial.selenic.com/guide/
转载请注明出处http://blog.csdn.net/rightgenius/archive/2011/02/26/6209306.aspx
Mercurial简明教程(在工作流程中学习Mercurial)
Learning Mercurial in Workflows
第一个工作流程是最简单的:你希望Mercurial能够帮你回顾之前的更改。
这只需要安装Mercurial并拥有对某个存储介质的写访问权限。这是复杂工作流程的基础。
l 准备Mercurial
第一步,要让Mercurial认识你。打开安装目录,编辑.hgrc文件(在Windows中是.ini文件),在ui章节中(user interaction用户交互)添加你的用户名
[ui]
username = Mr. Johnson <Johnson@smith.com>
l 初始化项目
现在添加一个你想工作的项目文件夹:
$ hg init project
l 添加文件并追踪修改
$ cd project
$ (add files)
$ hg add
$ hg commit
----------------------------------------------------
注意:
你也可以进入一个已经有文件的文件夹,在那里初始化项目
$ cd project
$ hg init
你可以选择特定的文件add到版本中,而其他的文件将不被mercurial识别。下面的命令告诉mercurial记录所有以“file0”打头的文件和另外3个独立文件“file10”、“file11”、“file12”。
$ hg add file0* file10 file11 file12
----------------------------------------------------
l 保存修改
$ (do some changes)
查看哪些文件被修改,哪些被添加或删除到版本中,以及还有哪些没有被版本记录
$ hg status
查看确切的改动
$ hg diff
向mercurial提交更改
$ hg commit
执行这个命令时会有一个编辑器弹出,让你提交版本更新信息,保存并关闭编辑器之后,你的更改将被保存到Mercurial
----------------------------------------------------
注意:
你也可以直接用 hg commit –m ‘MESSAGE’ 提交版本信息
----------------------------------------------------
l 移动和复制文件
当你移动或复制文件时,你一定要使用Mercurial来做这件事,从而能够记录这些文件之间的关系。
记住在移动和复制之后要commit。在基本命令中,只有commit可以产生新的版本。
$ hg cp original copy
$ hg commit
(enter the commit message)
$ hg mv original target
$ hg commit
(enter the commit message)
现在你有两个文件,”copy”和”target”,Mercurial知道他们之间是如何联系起来的。
----------------------------------------------------
注意:
如果你忘记了用显式的copy和move,你仍然能够告诉Mercurial去检查这些变更:hg addremove –similarity 100。去hg help查看addremove的使用细节。
l 查看历史记录
$ hg log
这个将打印出所有的版本变化和他们的提交日期,提交者和版本信息。
你可以使用-r开关(--revision)来查看特定的版本。查看显示的版本间的差异,可以使用-p开关(--patch)
$ hg log –p –r 3
第二个工作流程仍然很简单:你是一个独立的开发者,你打算用Mercurial记录你自己的版本变化。
这和日志记录流程有些类似,不同之处在于你有时会回到一个早期版本。
同样的建立新项目,初始化repository,添加文件并提交。
你也要不时的检查的历史记录,看看你是怎么一步步开发到现在的。
l 和日志记录一样的基础命令
初始化,添加、查看更改、提交
$ hg init project
$ cd project
$ (add files)
$ hg add # tell Mercurial to track all files
$ (do some changes)
$ hg diff # see changes
$ hg commit # save changes
$ hg cp # copy files or folders
$ hg mv # move files or folders
$ hg log # see history
l 查看一个早期版本
和日志记录不同,你希望回到某一个早期版本并且直接在那个版本中修改。例如因为一个早期的修改引入了一个bug,你希望修正它。
你可以使用update来查看早期版本的代码。我们假设你要看版本3
$ hg update 3
现在你的代码就返回了版本3 的状态了,即第四次提交(从0开始计算)。用idfentify –n确认你所在的版本。
$ hg identify –n
----------------------------------------------------
注意:
不加参数的identity命令将给你一个简写的版本ID,这是Mercurial内部使用的ID。如果你希望告诉其他人你update到的版本,需要使用这个ID,因为本地的计数版本号对于每个人来说是不同的。如果你想弄清楚这么做的原因,请阅读Mercurials [basic concepts]。当你在最新的版本时,hg identify –n 将会返回”-1”。
----------------------------------------------------
你可以使用”tip”作为版本名来update到最新的版本。
$ hg update tip
----------------------------------------------------
注意:
如果某个命令提示错误或警告,你最好按照它的提示进行。
----------------------------------------------------
----------------------------------------------------
注意:
你也可以用缩写 hg up 来代替 hg update
类似的使用hg ci 来代替 hg commit
----------------------------------------------------
----------------------------------------------------
注意:
如果要得到没有文件的版本,直接通过update null命令升级到“null”。这是什么文件都没有被添加之前的版本。
----------------------------------------------------
l 修正早期版本中的错误
当你发现一个从一个早期版本开始的bug,你有两种选择:直接在当前版本中修改,也可以回到历史版本修改,从而让历史记录更加清晰。
为了让历史记录更清晰,首先要update到过去的版本,修正bug并提交。之后你将整个版本merge到新版本中并提交。别担心,在Mercurial中Merging快速而轻松,你马上会看到。
首先我们假设bug在版本3中被引入。
$ hg update 3
$ (fix the bug)
$ hg commit
现在修正已经保存在了历史版本中。我们只需要将它和最新版本merge
$ hg merge
如果版本间有冲突,用hg resolve,当然这同样也是merge命令在出现冲突时会提示你的。
首先列出冲突的文件:
$ hg resolve –list
然后解决他们,用resolve尝试再次merge
$ hg resolve conflicting_file
(fix it by hand, if necessary)
标记修正的文件已经resolved
$ hg resolve –mark conflicting_file
一旦你解决了所有的冲突,提交merge。即使是没有冲突,这一步也是必要的!
$ hg commit
这样使用时,你的修正会被应用到所有你其他的工作中,然后你就可以继续coding啦。另外,历史记录将清晰的显示你在哪里修复了bug,所以你可以一直核对是哪里的bug。
----------------------------------------------------
注意:
大部分merge会直接起作用。当merge出现问题时,你只需要resolve。
----------------------------------------------------
因此你现在可以初始化repositories,保存修改,update到之前版本,提交早期的修正并与最新版本merge,从而在一个非线性的历史记录中开发。
----------------------------------------------------
注意:
如果你修复了早期版本中的bug,而后来的版本复制或移动了那个文件,这个修正将修改所有的目标文件。这是你使用hg cp和hg mv的主要原因。
----------------------------------------------------