tortoiseHg不能建立分支(可以建,2012-10-8),所以只好用命令行来做了,好在命令行也不复杂。
F:\VMFiles\tmpFiles\testHg>hg init // 当前目录下建立repo
// 新建文件test.txt
F:\VMFiles\tmpFiles\testHg>hg add test.txt // 增加对test的版本控制
F:\VMFiles\tmpFiles\testHg>hg ci -m "first time commit" // 提交test,ci是check-in的简写,也可写为commit
// 修改test.txt文件内容
F:\VMFiles\tmpFiles\testHg>hg st // 查看变化情况,st是status的简写 M test.txt
F:\VMFiles\tmpFiles\testHg>hg diff // 显示working directory中的内容与tip的区别 diff -r e83bcfd395df test.txt ...(详细内容对比)
F:\VMFiles\tmpFiles\testHg>hg commit -m "第二次修改" // 提交修改,双引号中(版本注释)可以写中文 F:\VMFiles\tmpFiles\testHg>hg log -v // 查看版本历史 修改集: 1:ee6f6492bd8b 标签: tip 用户: Chad 日期: Tue Jul 31 09:36:18 2012 +0800 摘要: 第二次修改 修改集: 0:3bf09e86781b 用户: Chad 日期: Tue Jul 31 09:28:56 2012 +0800 摘要: first time commit
F:\VMFiles\tmpFiles\testHg>hg revert test.txt // 放弃本次修改,新修改的文件重命名为test.txt.orig
F:\VMFiles\tmpFiles\testHg>hg branch red // 新建分支red,并切换到它上面
marked working directory as branch red F:\VMFiles\tmpFiles\testHg>hg commit -m "red上的修改" // 后面的修改都是基于当前分支red的
F:\VMFiles\tmpFiles\testHg>hg branch // 查看当前所处的branch red
F:\VMFiles\tmpFiles\testHg>hg branches // 显示当前所有分支 red 3:973327a4aa5d default 2:ee6f6492bd8b (inactive)
修改test.txt文件内容
F:\VMFiles\tmpFiles\testHg>hg commit -m "red上的第二次修改"
F:\VMFiles\tmpFiles\testHg>hg up default // 将当前分支切换为default,up是update的简写 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
F:\VMFiles\tmpFiles\testHg>hg log -b red // 只显示分支red上的版本 ...
F:\VMFiles\tmpFiles\testHg>hg tip -v // 显示tip版本信息 ...
F:\VMFiles\tmpFiles\testHg>hg heads // 显示当前各个branch上的最新版本
F:\VMFiles\tmpFiles\testHg>hg merge -t docdiff -r 3 // 与版本3合并,这里使用了diff工具docdiff,注意将它的路径加入到$PATH中,默认是"C:\Program Files\TortoiseHg"
F:\VMFiles\tmpFiles>hg clone http://www.selenic.com/repo/hello my-hello // 从网络上下载repo到当前目录的my-hello目录下
F:\VMFiles\tmpFiles\my-hello>hg clone . e:/aaa // clone当前(目录所在的)repo到e:\aaa目录下
F:\VMFiles\tmpFiles>hg clone my-hello my-hello-new // 复制当前目录下的repo(同时也是子目录)my-hello到my-hello-new下
修改my-hello-new/hello.c文件
F:\VMFiles\tmpFiles>cd my-hello
F:\VMFiles\tmpFiles\my-hello>hg pull ../my-hello-new // 将其他repo中的改进“拉”到当前(目录所在的)repo中,类似于SVN的update
当多个分支存在冲突时,merge会失败,比较好的策略是:主干(default)里是稳定的可用版,新加的功能放在分支里(每个新功能都建一个新分支),当功能通过验证后,再合并到主干里,这样的好处是分支的代码只会比主干多,合并时不会出现冲突。
另:
Hg原理的介绍: Understanding Mercurial
一个不错的Hg教程: Hg Init