学习hg(mercurial)版本控制

时间:2021-01-25 06:33:44
今天开始学习清风老师提到的第1点——版本控制工具。来了解一下版本控制工具,主要有2种:集中式版本管理和分布式版本管理,刚好和清风老师提到的SVN、Hg(Mercurial)对号入座,当然了分布式版本管理工具另外还有大名鼎鼎的Git。 

经过对比之后选择从Hg入门,首先是因为清风老师的推荐,其次是Google Code支持 SVN和Hg(Mercurial),然后还有就是Hg是用Python编写。官方wiki使用说明和帮助文档很详细。那么就开始吧: 

一、下载安装 

到这里 http://mercurial.selenic.com/downloads/ 选择相应版本下载安装,我这里使用的是OpenSUSE的zypper in mercurial 
安装完成后在终端中输入hg -v就会显示当前版本和基本命令等信息。 

二、基本命令 

Init是指初始化,也就是创建一个空的仓库。 

Clone是指创建仓库的复本,创建的来源可以是一个http或ssh链接表示的仓库,也可以是本地仓库。 

Commit是指提交,即接受所有的改动,将当前版本作为最新版本(也叫tip)。注意这个提交和集中式SCM不同,它只提交的本地仓库,而且本地仓库会 详细记录所有的变动(称为变更集或改动集)。因此不用客气,多提交几次也没关系,因为不影响别人的仓库。而如果怕影响自己的话,可以clone一个复本, 再对复本进行改写和提交。 

Revert是指恢复,即撤销所有的改动,恢复到未更改的状态。右键菜单里你是找不到它的,原因后面再提。 

Pull的意思是拉,是将其他仓库有,而当前仓库没有的变更集“下载”到当前仓库。不过这只是添加了变更集,文件并不会改动。(变更集有一个唯一的hash标识,所以很容易区分。) 

Update的意思就是更新,当获取了其他变更集,且需要更改以保持和其他仓库一致时,就可以执行它了 
。 
Push的意思是推,就是将当前仓库的变更集“上传”到其他仓库去。其他仓库必须支持该操作,并可能需要经过验证。如果是从本地仓库A push到本地仓库B,就相当于用B pull A。此外,push也不会更新仓库的版本,因为它是共享的,需要的人直接选择想要的版本即可。 

Merge就是指合并。当一个文件同时被多次修改,并存放在多个仓库时,要获得一个统一的版本,就需要合并。对于翻译而言,一个文本可能同时会分给多个人,于是合并时只需要接受每个人的改动即可。 

下面是一些实例: 

克隆仓库  
$ hg clone  http://www.selenic.com/repo/hello  my-hello 

检查仓库历史  
$ cd my-hello 
$ hg log 

编辑hgrc文件 
cd my-hello/.hg 
sudo vim hgrc 

查看状态(是否有变更) 
$ hg status 
M hello.c 
以 M 开头的行意思就是hello.c文件修改过 

使用 diff 命令检查文件实际的改变 
$ hg diff 
diff -r 82e55d328c8c hello.c 
--- a/hello.c Fri Aug 26 01:21:28 2005 -0700 
+++ b/hello.c Fri Sep 30 10:27:47 2005 +0800 
@@ -12,5 +12,6 @@ 
int main(int argc, char **argv) 

printf("hello, world!\n"); 
+ printf("sure am glad I'm using Mercurial!\n"); 
return 0; 


放弃变更 
$ hg revert 

创建一个变更集(提交) 
$ hg commit 

tip 命令来找出最后一个变更集 
$ hg -q tip 

把别的仓库中的 ChangeSet Pull 到本仓库 
$ hg pull ../my-hello-new-output 

在 Pull 后, 缺省情况下 Mercurial 不更新工作目录。这意味着虽然 Repository 现在有变更集, 但在工作目录中的文件仍然是Pull 之前老的内容。我们可以用以下Mercurial的提醒来 Update 这个文件 (也包括所有其它 Pull 时改变的文件)。 
$ hg update 

export 命令 
必需提供一个 Tag, 版本号或 变更集号 来告诉 Mercurial 有什么进入了 导出(Export) 
$ hg export tip 

合并改变 
$ hg merge 

启用hg自带的server 
sudo hg serve -p 8002 

三、当然了,最主要是把版本控制运用到项目中去,养成良好的习惯,以后要多加练习。 

四、相关教程: 
官网维基 http://mercurial.selenic.com/wiki/ChineseMercurial  
新手教程 http://mercurial.selenic.com/wiki/ChineseTutorial  
快速指南 http://mercurial.selenic.com/wiki/ChineseQuickStart  
实例教程MercurialByExample.pdf 
Mercurial权威指南  http://hgbook.red-bean.com/read/  
IBM developerworks  http://www.ibm.com/developerworks/cn/opensource/os-cn-mercurial/  

五、参考内容 
《为什么我们要放弃Subversion》 
http://www.infoq.com/cn/articles/thoughtworks-practice-partiv  
《分布式的版本控制工具》 
http://blog.codingnow.com/2008/01/distributed_version_control.html  
《分 布式版本控制(一)》 
http://blog.csdn.net/Raptor/archive/2008/02/29/2133797.aspx  
《分 布式版本控制(二)》 
http://blog.csdn.net/Raptor/archive/2008/03/04/2145492.aspx  
《我 与Mercurial 系列等几篇文章》 
http://weavesky.com/2008/01/25/mercurial-and-me/  
译文《Git 与 Mercurial 的分析》 
http://blog.twpug.org/416  
原文《Analysis of Git and Mercurial》 

http://code.google.com/p/support/wiki/DVCSAnalysis 


原文:http://www.douban.com/group/topic/15796655/