版本控制hg的常见用法

在Linux下,Hg与金属汞无关,它是一个类似于Git的版本控制器,全名为Mercurial source code management system。

与中心式版本管理软件如SVN不同,分布式版本控制没有中心节点,任何人都有所有历史版本,不连网也能本地使用,任何两个开发人员间都能merge代码,适合开发人员众多,分支众多的开发模式。

hg的.hgignore文件支持正则和通配符两种模式的配置,举个例子:

# use glob syntax.
syntax: glob

*.swp
*.o
*.a
*.pyc
*.pyo
test_*

# switch to regexp syntax.
syntax: regexp

^output
^proto/[^/]*\.pb\.h$
^proto/[^/]*\.pb\.cc$

开启一个web server,默认只读,不支持用户权限管理:

hg serve -p 8000

与svn info不同,查看当前目录的版本信息使用如下命令:

hg summary
hg sum    #简写

文件重命名,相当于 copy + remove:

hg rename a.jpg beauty.jpg
hg move a.jpg beauty.jpg
hg mv a.jpg beauty.jpg

跳转到指定版本,类似于svn switch功能:

hg update tip       #最新提交的版本
hg up branchname    #某个分支的最新版本
hg -r 100           #指定的版本号
hg 972b566dcb78     #指定的changeset号

开分支命令:

hg up -r 100                        #转到某个版本下
hg branch -f anotherbranch          #添加分支
hg ci -m "add branch" -u hustyx     #提交所打的分支

查看所有的分支:

hg branches

合并分支,指定将某版本或者某分支的一段修改merge到当前版本上:

hg merge -P -r more              #查看将要从more这个分支merge过来的内容
hg merge -r more                 #实际进行merge
hg ci -m "merge" -u yixiang      #merge之后需要ci

指定两个版本进行Diff比较:

hg diff -r shortone -r mybranch

打Tag:

hg tag -r shortone -m '打tag' -u yixiang 'tag_1.0.0.0'

显示所有tag:

hg tags

进行远程同步,即推或者拉,push 和 pull。注意,push和pull时代码必须是同源的,也就是追溯到根,必须有一样的changeset号。下面的例子是将本地的tip版本路径通过ssh方式提交到远程服务器(注意:push之后远程端需要up一把):

hg push -r tip ssh://user@aliyun//tmp/hgtest/

将远程的修改拉(pull)到本地来,下面的例子使用hgweb来进行连接:

hg pull -r tip http://www.hustyx.com:8087/

通过上面的例子,本地版本结构为:

远程版本结构为:

hg显示log有比较丰富的参数选项:

hg log zzz.cpp   #显示某个文件的历史
hg log -k te     #搜索带某个关键词的历史记录
hg log -G        #显示一个文本表达的历史关系图,跟hg serve展示的一样,不过是用终端字符表示的
hg log -l 2      #顶多显示两条历史
hg log -f        #显示当前版本路径上的提交日志信息(默认是显示所有的版本路径)

补丁的好处是可以将补丁文件通过邮件发送给其他开发者。打补丁:

hg export -o "patch.%R" -r 16 -r 17     #生成补丁
hg import patch.*                       #使用补丁

打包输出某个版本:

hg archive -t tgz -r tip /tmp/tip.tar.gz

如果有两个人同时对同一个版本的同一个文件做了不同的修改,由此就有冲突,那么合并过程是先pull,后merge,然后resolve,再commit,最后再push结果给对方:

hg pull ssh://aliyun//tmp/hgtest/    #将对方的修改拉到本地
hg merge                             #合并代码,有冲突会自动进行diff
hg resolve --all                     #如果上一步中没有解决冲突,此命令可再次解决
hg ci -m "merge" -u username         #提交
hg push ssh://aliyun//tmp/hgtest/    #将最终结果推给对方

注意:由于hg是使用python实现的,有趣的一点是,如果你有一个文件叫abc.py,那么hg add abc.py会失败。

sourceforge 是使用的hg,clone也成为sourceforge上最常用的下载代码命令(可以不加版本以下载所有代码库,也可以通过-r指定一个或多个版本的代码):

hg clone http://www.hustyx.com:8000/ -r 1 -r 2 hgtest

graft命令类似于merge,不过它只是将某个版本的修改提交到当前分支,并不是真正合并分支。执行命令后不再需要ci提交:

hg graft -r 5

 

发表于 2015年08月21日 15:58   评论:0   阅读:3234  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo