注意:请参阅“编辑”以获取当前问题的答案
首先,请阅读Joel Spolsky的Subversion Re-education。我想您的大部分问题都会在那得到解答。
另一个建议是Linus Torvalds在Git上的演讲:http : //www.youtube.com/watch?v= 4XpnKHJAok8 。另一个可能还会回答您的大多数问题,这是一个很有趣的问题。
顺便说一句,我觉得很有趣:甚至两位颠覆的原始创造者Brian Fitzpatrick和Ben Collins-Sussman在一次Google演讲中都表示“对此感到抱歉”,指的是颠覆不如水银(一般来说是DVCS)。
现在,无论是IMO还是总体而言,任何DVCS的团队动态发展都更加自然,而一个显着的好处就是您可以脱机提交,因为这意味着以下几点:
- 您不依赖服务器和连接,这意味着速度更快。
- 不要成为可以进行互联网访问(或VPN)的奴隶。
- 每个人都备份了所有内容(文件,历史记录),而不仅仅是服务器。意味着任何人都可以成为服务器。
- 如果需要,可以强制执行,而不会弄乱别人的代码。提交是本地的。提交时不要踩到对方的脚趾。您不会仅仅通过提交来破坏他人的构建或环境。
- 没有“提交访问权限”的人可以提交(因为在DVCS中提交并不意味着上载代码),降低了贡献的壁垒,您可以决定是否进行更改或不作为集成者。
- 由于DVCS使得这一点至关重要,因此它可以加强自然交流。在颠覆中,您所拥有的是提交竞赛,它迫使交流,但是却阻碍了您的工作。
- 贡献者可以组队并处理自己的合并,这最终减少了集成者的工作。
- 贡献者可以拥有自己的分支机构,而不会影响他人的分支机构(但可以在必要时共享它们)。
关于您的观点:
- DVCSland中不存在合并地狱;不需要处理。见下一点。
- 在DVCS中,每个人都代表一个“分支”,这意味着每当更改被拉时,就会存在合并。命名分支是另一回事。
- 您可以根据需要继续使用持续集成。但是不是必需的恕我直言,为什么要增加复杂性?,只需将测试作为您的文化/政策的一部分即可。
- 在某些方面,Mercurial更快,而在其他方面,git则更快。一般而言,并不是真正取决于DVCS,而是取决于它们的特定实现AFAIK。
- 每个人都将拥有完整的项目,而不仅仅是您自己。分布式的事情与您可以在本地提交/更新,从计算机外部共享/获取有关,这称为推/拉。
- 再次,阅读Subversion再教育。DVCS更容易,更自然,但是它们是不同的,不要试图认为cvs / svn ===所有版本的基础。
我正在为Joomla项目提供一些文档,以帮助宣讲向DVCS的迁移,在这里,我制作了一些图表来说明集中式与分布式。
集中
在一般实践中分发
分配到最充分
您在图中看到仍然有一个“集中式存储库”,这是集中式版本控制爱好者最喜欢的参数之一:“您仍在集中化”,不是,因为“集中式”存储库只是您自己的存储库所有人都同意(例如,官方的github回购协议),但这可以随时更改。
现在,这是使用DVCS的开源项目(例如,具有大规模协作的项目)的典型工作流程:
Bitbucket.org有点像github上的mercurial,知道它们有无限的私人存储库,具有无限的空间,如果您的团队小于五个,则可以免费使用。
确信使用DVCS的最佳方法是尝试DVCS,每位使用svn / cvs的资深DVCS开发人员都会告诉您这是值得的,并且他们不知道如果没有它,他们将如何生存下来。
编辑:要回答您的第二次编辑,我只想重申一下,使用DVCS时您具有不同的工作流程,我建议您不要因为最佳实践而寻找不尝试的理由,这就像人们认为OOP不是这是必要的,因为他们可以使用范式XYZ来解决复杂的设计模式;无论如何你都可以受益。
尝试一下,您将看到在“私有分支”中进行工作实际上是一个更好的选择。我可以说出为什么最后一个是正确的原因之一是因为您失去了承诺的恐惧,允许您在认为合适的任何时候都以更自然的方式进行承诺。
关于“合并地狱”,您说“除非我们正在试验”,否则我说“即使您正在试验+维护+ 同时在经过改进的v2.0中工作 ”。正如我之前所说,合并地狱不存在,因为:
- 每次提交时,都会生成一个未命名的分支,并且每次您的更改遇到其他人的更改时,都会自然合并。
- 由于DVCS为每次提交收集更多的元数据,因此在合并期间发生的冲突较少……因此您甚至可以将其称为“智能合并”。
- 当您遇到合并冲突时,可以使用以下方法:
此外,项目规模也无关紧要,当我从Subversion切换时,我实际上已经在单独工作时已经看到了好处,一切都感觉不错。该变更(不完全是一个修订版,而是一组特定的你包括提交特定文件的变化,从代码库的状态孤立的),让你想象你做你做给特定的文件组是什么意思到底是什么,不是整个代码库。
关于变更集的工作方式和性能提升。我将尝试通过一个示例来说明这一点:mootools项目从github网络图中的 svn切换到svn 。
之前
后
您所看到的是开发人员能够在提交时专注于自己的工作,而不必担心破坏别人的代码,他们担心在推/拉之后会破坏别人的代码(DVCS:先提交,然后推/拉,然后更新),但由于这里的合并比较聪明,所以他们通常永远不会做...即使发生合并冲突(这种情况很少见),您也只花了5分钟或更短的时间就解决了。
我对您的建议是寻找一个知道如何使用汞/ git的人,并告诉他/她亲自向您解释。通过在命令行中与一些朋友花费大约半小时,同时在桌面和bitbucket帐户上使用mercurial,向他们展示了如何合并,甚至为他们制造了冲突,以了解他们如何解决可笑的大量时间,我得以展示它们是DVCS的真正力量。
最后,如果您与Windows人员一起工作,我建议您使用mercurial + bitbucket而不是git + github。Mercurial还是有点简单,但是git对于更复杂的存储库管理(例如git rebase)更强大。
一些其他推荐的读物: