我经常读到Hg(和Git和......)在合并方面比SVN更好但是我从未见过Hg/Git可以合并SVN失败的地方(或者SVN需要人工干预的地方)的实际例子.您可以发布一些分支/修改/提交/ ....-操作的逐步列表,显示SVN在Hg/Git愉快地移动时会失败的位置吗?实用,非常特殊的情况请...
一些背景:我们有几十个开发人员在使用SVN进行项目,每个项目(或一组类似项目)都在自己的存储库中.我们知道如何应用发布和功能分支,所以我们不会经常遇到问题(即,我们一直在那里,但我们已经学会克服Joel的问题 "一个程序员给整个团队造成创伤"或"需要六个开发人员两周才能重新整合分支机构").我们的发布分支非常稳定,仅用于应用错误修正.我们的中继线应该足够稳定,能够在一周内创建发布.我们还有一些开发人员或开发人员可以使用的功能分支.是的,它们在重新集成后被删除,因此它们不会使存储库混乱.;)
所以我仍然试图找到Hg/Git优于SVN的优势.我很想获得一些实践经验,但目前还没有任何我们可以移动到汞/ GIT中还没有更大的项目,所以我坚持用只含有少量由文件小型人工玩的项目.而且我正在寻找一些你可以感受到Hg/Git令人印象深刻的力量的案例,因为到目前为止我经常读到它们但却未能自己找到它们.
在Subversion或CVS中处理多个合并到分支上只是必须经历的事情之一.在Mercurial(以及可能是任何其他分布式系统)中跟踪分支和合并非常容易,但我不知道为什么.还有其他人知道吗?
我的问题源于这样一个事实:使用Mercurial你可以采用类似于Subversions/CVSs中央存储库的工作实践,一切都会正常工作.您可以在同一分支上执行多个合并,并且您不需要具有提交编号和标记名称的无数废纸.
我知道最新版本的Subversion能够跟踪合并到分支机构,所以你不会有相同程度的麻烦,但它是一个巨大而重大的开发,并且它仍然不能完成开发团队所做的一切喜欢这样做.
它的运作方式必然存在根本区别.
我已经使用Mercurial一段时间了,并且有一个"事实"被多次给出.
事实上,昨天观看由Fogcreek制作的视频时,它让我感到震惊,这段视频:Fog Creek Kiln:为您的公司解锁DVCS的力量,似乎有些东西对我来说不起作用.
在该视频及其后的1:39左右,它表明当其他版本控制系统跟踪修订版(即快照)时,DVCS'就像Mercurial跟踪更改集(即快照之间发生的事情).
这使它们在合并场景中具有优势,然后它显示了一个示例.如果您在一个分支中移动一个函数,并在另一个分支中更改相同的函数,Mercurial可以合并它.
虽然我现在找不到任何直接链接,但我已经在其他地方看到了这一点.
这对我来说似乎不起作用.
编辑:这是TortoiseHg的默认"beyondcompare3"合并工具配置的问题.我将下面的配置添加到我的Mercurial.ini文件中,现在它按预期工作.当然,如果它不能自动充电,它会向GUI工具发挥作用,但现在这个问题中描述的合并在没有任何提示的情况下运行,并且开箱即可做正确的事情
[ui]
merge = bc3
[merge-tools]
bc3.executable = C:\Program Files (x86)\Beyond Compare 3\bcomp.exe
bc3.args = $local $other $base $output /automerge /reviewconflicts /closescript
bc3.priority = 1
bc3.premerge = True
bc3.gui = True
Run Code Online (Sandbox Code Playgroud)
为了测试这个,我将此文件提交到存储库:
void Main()
{
Function1();
Function2();
}
public void Function1()
{
Debug.WriteLine("Function 1");
for (int index = 0; index < 10; index++)
Debug.WriteLine("f1: " + index);
}
public void Function2()
{
Debug.WriteLine("Function 1");
}
Run Code Online (Sandbox Code Playgroud)
然后在从这一个分支出来的两个不同的并行更改集中,我做了以下两个更改:
然后我尝试合并,Mercurial给了我一个合并冲突窗口,试图弄清楚我做了什么.
基本上,它尝试更改Function2中的文本,该文本现在处于Function1移动之前的位置. …