今天开始学习清风老师提到的第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/