Mercurial存储库有很多活跃的开发人员?

时间:2010-10-08 08:39:17

标签: mercurial

我正在浏览Bitbucket,如果我们切换到Mercurial,我似乎无法找到任何看起来像我怀疑我们的存储库看起来的Mercurial存储库。

因此,我想知道,有没有我们在这里考虑的工作流程?

我所说的是我做了一个小型的自动化测试。我们有14个人在同一个项目上工作,分成4个scrum团队。为了模拟在代码上并行工作的14个人(我选择了10个整数),使用Mercurial DVCS,推送到同一个中央主存储库,我写了一个脚本。

  1. 我创建了一个新的“主”存储库,然后为10个虚拟人克隆了它
  2. 然后我运行了1000次迭代循环,选择了一个随机克隆,然后执行以下操作之一:
    • 10%的时间,从主人那里拉,合并,提交合并,然后按
    • 90%的时间,进行本地更改并提交
  3. 请注意,我确保通过简单地让每个虚拟人员在他自己的文件上工作来永远不会发生合并冲突。

    这将模拟在拉动,合并和推动之前进行1次提交的本地工作人员(避免在主回购中使用2个以上的头部)。可能是这个工作流程是错误的。

    这是存储库现在的样子(截图+链接到repo):

    sample screenshot from TortoiseHg

    可在此处找到存储库:http://hg.vkarlsen.no/hgweb.cgi/parallel_test/graph

    这看起来非常混乱,正如我所说,我似乎无法找到任何具有相似历史的存储库。通过“凌乱”,我的意思是看起来项目的旧历史几乎总是有10个并行分支。接近顶部,当然它逐渐减少,但随着当前在本地存储库中工作的人推送到主服务器,它将会扩展。

    所以我有两个问题:

    1. 有人能告诉我一个历史相似的存储库吗?由于我似乎找不到任何东西,我开始怀疑我能从中得出什么样的结论......
    2. 我们的工作流程是否有问题(也就是我在这里列出的工作流程)?我们应该改变/挤压/移植,将推动责任委托给一个人,其他事情,而不是在这里完成的方式吗?

2 个答案:

答案 0 :(得分:8)

令人印象深刻的准备!

  1. 如果你稍微回过头来查看所有旧的提交,它总是看起来很乱。它总是逐渐变细,甚至看着一点点古老的历史。例如,请参阅http://hg.intevation.org/mercurial/crew/graph/12402?revcount=120。这不是最近的提交,但显示了该提交之前的所有历史记录。

  2. Rebase帮助很大,特别是如果人们在不同的区域工作。 (我通常检查传入的提交以查看是否存在潜在的文件或功能冲突,如果没有,我会进行rebase。)

  3. Rebase虽然不是万无一失,所以merge是首选的“安全”操作,但它在历史上留下了更多的“垃圾”。权衡。

    Rebase有点像沼泽标准SVN更新。现有的东西是基线,你的变化是最重要的,交叉你的手指它仍然有效。这很有用,但有时候你觉得把你的,他们的和合并作为历史上的单独提交更安全。

    还有提交压缩作为选项(可能是hetedit扩展),它会将所有中间提交压缩为一个。当您即将推送并希望将自己的repo中的许多部分提交作为单个提交传递给main时,这非常有用。

答案 1 :(得分:6)

我有12个开发人员在同一个Mercurial存储库中工作,我们的历史看起来并非如此。偶尔会有合并提交,但大多数合并来自合并实际分支,即我们的主要开发分支中可能会合并,从生产/发布分支​​上的错误修复版本中进行更改。

这很容易实现,开发人员破解并提交到他们的本地存储库,当他们有足够稳定的东西与他们推动的其他团队共享时。

如果没有提交任何内容,因为他们开始提交推送没有问题。

如果其他人提交了更改,Mercurial会抱怨推送会创建远程头部。然后开发人员执行hg pull --rebase并重试推送。推动过去,每个人都很高兴。

如果您正在使用与定期推送到共享存储库的开发人员的持续集成,那么这是可行的方法。知道你是否推动了更改很容易,你可以避免许多无用的合并提交使你的历史变得混乱。