软件开发过程中经常需要在现有的稳定版本上开发新性能,直接在原有的代码仓库上修改不是好办法,首先是由于新功能的开发具有比较大的不确定性,其次在原有的仓库中修改会影响使用该仓库的其他程序。比较好的办法是从稳定版仓库中clone一个副本到新的位置,然后开始新功能的开发,当新功能稳定后push到稳定版仓库中。
Hg对上面的工作流程提供了很好的支持,下面以本地仓库间clone为例演示整个过程(如果副本与原版不在一台机器上,使用Hg内置的http server用hg serve启动服务即可实现不同机器间的开发协同)。
假设稳定版仓库位置是c:\tmp\HgRepo下,tip的版本号是6,现在要开发新特性AutoSave,首先clone仓库:
c:\tmp>hg clone HgRepo AutoSave
如果希望从HgRepo的第4个版本开始开发,可以加-r参数:hg clone -r 4 HgRepo AutoSave,用这种方法可以实现比较安全的版本“回退”,比如提交到版本7后发现版本5~7有问题,可以用"clone -r 4"建立一个新的副本,原来的仓库可以视情况予以保留或丢弃。
AutoSave中修改完毕后,可以用hg push直接同步到HgRepo中,这是因为AutoSave的默认仓库是其clone来源HgRepo,hg自动在AutoSave的.hg/hgrc中添加如下配置:
[paths] default = c:\tmp\HgRepo
在push之前先用hg out比较一下AutoSave与HgRepo之间的区别,当有其他开发者向HgRepo中提交更新时,out就必不可少了。
或者用pull的方法,在HgRepo下用hg in repoName比较两个仓库。