Mercurial简介
hg应用手册
hg使用教程(推荐)
hg基本用法
Mercurial(Hg)版本控制工具
HG(Mercurial)介绍:
Mercurial是一款非常优秀的分布式版本控制系统(DCVS),具有高效率、跨平台、可扩展、使用简便且开源等优点,是目前最为流行的版本控制工具之一。Mercurial英文意为水银,所以常被缩写为Hg。在使用Mercurial之前,我曾经使用过VSS(已停止更新)和SVN,也尝试过微软的TFS,它们都不是分布式版本控制系统,换句话说,就是当源码服务器故障或网络不通时,你将无法提交你所做的本地修改。这也是之前的版本控制工具与Mercurial最大的不同,目前与Mercurial类似的工具还有Git,但由于对Windows系统的支持做得不是很人性化,我个人不太喜欢。
最开始接触Mercurial时,由于长期使用SVN的缘故,已经习惯了依赖中央源码服务器,也曾感觉Mercurial的操作很别扭,不是很方便。但当我在项目中使用了一段时间以后,就喜欢上这个它了。下面放出Mercurial相关的一些信息:
Mercurial官网:http://mercurial.selenic.com/
Mercurial客户端(TortoiseHg):http://tortoisehg.bitbucket.org/
支持Visual Studio中使用Mercurial的插件VisualHg:http://visualhg.codeplex.com/,如果你使用的是Visual Studio 2010或更高版本,可以直接从扩展管理器中获取此插件。
Mercurial官方中文教程:http://mercurial.selenic.com/wiki/ChineseTutorial
免费的代码托管服务:https://bitbucket.org/,免费帐户可以管理5个用户,可以托管公共和私有项目。
- 1
- 2
- 3
- 4
- 5
- 6
一、下载安装
到这里http://mercurial.selenic.com/downloads/选择相应版本下载安装,安装完成后在终端中输入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
- 1
- 检查仓库历史
$ cd my-hello
$ hg log
- 1
- 2
- 编辑hgrc文件
cd my-hello/.hg
sudo vim hgrc
- 1
- 2
- 查看状态(是否有变更)
$ hg status
M hello.c
- 1
- 2
以 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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 放弃变更
$ hg revert
- 1
- 创建一个变更集(提交)
$ hg commit
- 1
- tip 命令来找出最后一个变更集
$ hg -q tip
- 1
- 把别的仓库中的 ChangeSet Pull 到本仓库
$ hg pull ../my-hello-new-output
- 1
在 Pull 后, 缺省情况下 Mercurial 不更新工作目录。这意味着虽然 Repository 现在有变更集, 但在工作目录中的文件仍然是Pull 之前老的内容。我们可以用以下Mercurial的提醒来 Update 这个文件 (也包括所有其它 Pull 时改变的文件)。
$ hg update
- 1
export 命令
必需提供一个 Tag, 版本号或 变更集号 来告诉 Mercurial 有什么进入了 导出(Export)
$ hg export tip
- 1
- 合并改变
$ hg merge
- 1
- 启用hg自带的server
sudo hg serve -p 8002
- 1
三、当然了,最主要是把版本控制运用到项目中去,养成良好的习惯,以后要多加练习。
四、相关教程:
官网维基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