Mercurial是一个跨平台的分布式版本控制工具。主要由Python语言实现,也包含一个用C语言实现的二进制比较工具。对Mercurial的所有操作都由不同的关键字作为hg的参数来实现的。它采用SHA-1散列算法来识别修订版本,使用一个基于HTTP的协议来接入网络中版本库,在2005年第一次发布。转换插件可以将其他版本库转换成Mercurial的版本库。从第6版开始支持Netbeans。TortoiseHg提供一个面向Windows的基于右键菜单的快捷方式。
Mercurial有个严重的缺点:不支持针对单个文件夹的分支。Python、Firefox、Google都使用Hg作为版本控制工具,与Git相比,跨平台,而且性能高。代码托管可以选择BitBucket。
下面操作方法使用之前,必须搭建好hg服务器。
操作方法:
1.下载源代码:进入要放置代码的目录,比如I盘;hg clone ssh://username@10.3.0.165:22/DEV300-hg [dir name] :若不指定代码目录名称,则名字自动为DEV300-hg密码:*****
2.查看当前信息:
hg branches :查看该主干上的所有CWS分支
hg branch :显示当前代码的CWS名称(初次下的代码默认为主干,名称为default)
3.创建CWS
hg branch cws-name :创建CWS,必须保证当前的代码环境为主干,即hg branch命令查询的结果为default
4.切换分支:hg update -r cws-name :切换当前代码环境为相应的CWS,此命令只切换分支,并不下载实际的源文件
hg update -r default :切换至主干
hg update -C -r cws-name :切换CWS的同时将代码更新为该CWS的代码,但是切换之前的分支中的未提交代码将丢失
5.更新当前分支:
hg pull;
hg update;
或hg pull -u :将当前CWS更新至最新代码
6.添加新文件至CWS
hg add path/file1 path/file2 ... :添加新文件,指定每个所添加文件的详细路径,多个文件之间用空格分开,防止添加不相关的文件
hg status :在添加新文件之前,可以用该命令查询当前代码中的未知文件
7.代码提交至本地代码库之前的检查:
hg status -m :查询所修改的文件列表
hg status -a :查询所添加的新文件列表
8.代码提交至本地代码库:hg commit -m "your comments to your codes" path/file1 path/file2 ...
9.提交至服务器之前的验证:
hg log -v -r tip :提交至本地代码库后,检查提交的是否正确,若有问题,运行下一命令,重新提交hg rollback :若有问题,运行此命令,再重新提交hg outgoing :再次验证10.提交代码至服务器:hg push [-f] :将代码提交至服务器,在保证前面的程序正确无误后,再执行此提交
P.S.:-f参数只有在第一次创建CWS时使用,以便将该CWS push到服务器上去,之后提交代码时都不用此参数
"hg push"时很有可能你的提交会被拒绝(提示会增加一个远程heads),这表明有人在你pull之后且在你push之前在你工作的同一个分支上已经push过代码了,你必须更新后才能push。解决方法是使用"hg pull -u"命令更新代码(或更精确的使用"hg pull -u -r 分支名"更新你所在分支的代码即可,此法有时似乎行不通),然后使用"hg merge"解决冲突,解决完冲突后commit,这时再使用"hg push"命令就可以了。
11.查询分支的操作记录
hg log -v -b cws-name :查询相应分支的操作记录
12.查询记录
hg log 命令有很多有用参数可以帮助我们比较方便的查询历史提交记录以方便追溯代码。例如: "hg log -u myname" 会列出用户myname的所有提交记录。
"hg log -d 2010-01-28" 会列出在2010-01-28这一天的所有提交记录。
关于日期格式可用"hg help dates"查看。
"hg log -k bug25703" 会列出包含bug25703这个关键字的所有提交记录,(注意hg关键字搜索包含两个地方:提交文件和提交注释)。
以上选项-u -d -k 还可以组合使用以提高搜索命中率,
例如:"hg log -u zongyuan.xiao -d "2010-01-28 to 2010-01-29" -k bug25703" 会搜索用户zongyuan.xiao在从2010-01-28到2010-01-29这两天的所有包含关键字bug25703的提交记录。
"hg log path/to/a.cxx" 可以查看指定文件的记录(多个文件用空格分开),当然也可以使用上面提到的选项 -u -d -k 等。