Mercurial思想研读系列文章——5. 初步深入提交与合并

阅读更多

 

1. Mercurial提供了hg incoming命令,它会告诉我们hg pull将会把哪些变更拖进版本库,但不会真正的执行。

因为在运行hg incominghg pull之间可能存在延时,你可能不能看到从其他版本库中的所有导入进来的变更集。假如你正在通过网络从其他地方的版本库拖变更。当你查看hg incoming的输出,还没有拖这些变更的时候,其他人向这个版本库提交了一些东西。这意味着你可能拖进来比你用hg incoming看见的多的变更。如果你仅希望将hg incoming命令列出的变更拖进来,或者由于其他原因希望得到变更的一个子集,那么你可以明确的指定变更集的ID,比如hg pull -r7e95bb

Mercurial允许你将这两个操作组合在一起,只要给hg pull命令加上-u选项就可以了(update)

对于pushoutcoming

 

2. 顶点修改集

Mercurial思想研读系列文章——5. 初步深入提交与合并_第1张图片

在图中,你可以看到将变更从my-hello拖到my-new-hello之后的效果。my-new-hello中已有的版本历史没有发生任何变化,但是增加了一个新的版本。从图 3.1 “my-hello my-newhello最新的历史分叉”中,我们可以发现变更集标识符在新的版本库中保持不变,但是版本号变了。 (顺便说一句,这个例子很好的解释了为什么在讨论变更集的时候版本号是不安全的。我们可以使用hg heads命令查看版本库中的领头版本。图中是56Merge也是合并领头版本。

 

3.对合并结果

当我们完成合并,并通过hg commit提交合并的结果之前,hg parents命令都会显示当前版本有两个父版本。现在我们有了一个新的顶点版本;注意先前的领头版本都是它的父版本。

 

4. Mercurial没有内建的工具处理冲突。相反,它会运行外部程序,通常是一个能够以图形化显示冲突的软件。缺省情况下,Mercurial会试着从有可能在你系统上安装的几个合并工具中挑选一个。它首先会尝试几个全自动的合并工具;如果不成功(因为解决冲突需要人工干预)或者找不到,它会尝试其他不同的图形化合并工具。如果将环境变量HGMERGE传给你的程序,还可以让Mercurial运行特定的程序或者脚本。

 

5. 三路合并工具推荐:kdiff3

 Mercurial思想研读系列文章——5. 初步深入提交与合并_第2张图片

 

6. Mercurial发布的时候有一个扩展叫做fetch可以完成pull –u mergecommit –m ..三步的工作

使用fetch扩展非常容易。编辑你的家目录的.hgrc文件,找到扩展段或者创建一个扩展段。然后增加一行“fetch=”

(一般情况下,“=”的右边应该表示如何找到扩展,但是因为fetch扩展是在标准的发布版中, Mercurial知道哪里能找到它。)

这里也说明了HG的可扩展性和扩展的使用方法

你可能感兴趣的:(mercurial,hg,svn,分布式,版本管理)