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

ang*_*son 18 mercurial

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

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

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

  1. 我创建了一个新的"主"存储库,然后为10个虚拟人克隆它
  2. 然后,我运行了一个1000迭代循环,选择一个随机克隆,并执行以下操作之一:
    • 10%的时间,从主,从合并,提交合并和推送拉
    • 90%的时间,做一次本地更改并提交

请注意,我通过简单地让每个虚拟人员在他自己的文件上工作来确保永远不会发生合并冲突.

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

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

来自TortoiseHg的示例截图

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

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

所以我有两个问题:

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

Mac*_*cke 9

令人印象深刻的准

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

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

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

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

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


Joa*_*man 7

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

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

如果没有任何事情已经提交,因为他们开始提交推动经历没有问题.

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

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

  • 是的,rebase确实是使历史变得美观和线性的关键工具.在Mercurial本身,我们使用我们接受邮件列表上的补丁的方式进行隐式rebase,当我在本地拥有我想要推送的更改集时,我会做一个明确的rebase.我们几乎只会在将变更集并行推送到两个不同的公共存储库时进行合并,例如,当Matt将某些东西推送到他的存储库时,我将其他东西推送到工作人员存储库而没有注意到他的推动.原因很简单,你不应该重新定义发布的变更集,所以我们合并. (5认同)