Mercurial使用经验谈:Pull之后和Push之前该做什么?

Mercurial作为分布式版本管理系统,速度快,使用方便。对比SVN,唯一更复杂的就是Pull/Push操作了。

 

Pull的作用是从其他库获取新的改动。根据实际情况我可能会得到几种结果:

  • 如果我在本地库中没有做过提交,那么Pull的结果很直接,就是把新的改动添加到当前库的tip之后
  • 注意这时候我的本地代码文件并没有更新,只是本地库被更新了。还需要一个额外的Update操作。可以在TortoiseHg中设置Pull之后自动Update,效果就跟SVN是一样的了。
  • 如果我在本地库中提交过版本,那么Pull之后会出现匿名分支。简单地说,我的改动会自动成为一个新的分支。我的改动不会自动合并到当前的tip中,除非我做点什么。我有几个选择:
    • Merge。把我的改动和更新的改动合并,合并后两个匿名分支会变成一个。跟SVN类似,这个过程可能会产生冲突,需要手工处理。
    • Rebase。这个似乎是GIT首创的,Mercurial用插件实现,需要先行启用。Rebase把我的改动转接到更新版本的后面,相当于把我的分支嫁接到刚刚更新的主干上。Rebase的好处是不会有匿名分支,我很喜欢这样做。但要注意,如果我的改动已经同步到其他库了,就不要做Rebase,否则容易导致多个库之间的同步问题。
    • 如果我的代码还在修改中,暂时还不想合并,可以保持现状,继续提交到这个匿名分支。直到代码完成后,再Merge或者Rebase。

 

Push的作用与Pull相反,把我的改动放到其他库中。Push之前应该先Pull,这样可以保证自己解决所有冲突之后,再把结果放到其他库。不要把麻烦留给别人!


分布式版本管理带来优点的同时,也增加了一些操作上的负担,正确的理解和使用能让工作更愉悦!

posted @ 2010-07-25 17:10  tinyfish  阅读(1628)  评论(0编辑  收藏  举报