我是一名Mercurial开发人员,曾担任 Mercurial 顾问。所以我觉得你的问题很有趣,希望我能回答:
您是正确的,IDE 现在可以跟踪本地更改,而不仅仅是简单的撤消/重做。但是,这些文件快照和完整的版本控制系统在功能上仍然存在差距。
本地提交使您可以选择在提交“故事”以供审核之前在本地准备“故事”。我经常处理一些涉及 2-5 次提交的更改。在我提交 4 之后,我可能会返回并稍微修改提交 2(也许我在提交 4 之后在提交 2 中看到了一个错误)。这样我不仅会处理最新的代码,还会处理最后几次提交。当一切都在本地时,这是微不足道的,但如果您需要与中央服务器同步,则变得更加棘手。
- 如果我的硬盘崩溃了怎么办?[...] 那么与签入中央仓库相比,它有多酷呢?
一点都不酷!:-)
但是,即使使用中央存储库,您仍然需要担心工作副本中未提交的数据。因此,我认为无论如何你都应该有一个备份解决方案。
根据我的经验,人们通常在使用集中式系统的工作副本中存放大量未提交的数据。客户告诉我他们如何试图说服开发人员每周至少提交一次。
这些更改通常未提交,因为:
他们还没有真正完成。代码中可能有调试打印语句,可能有不完整的函数等。
提交将进入trunk
,这对于集中式系统是危险的,因为它会影响其他所有人。
提交将要求您首先与中央存储库合并。如果您知道对代码进行了其他冲突更改,那么该合并可能会令人生畏。合并可能很烦人,因为您可能还没有完成所有更改,并且您更喜欢从已知良好的状态开始工作。
当您必须与过载的中央服务器通信时,提交可能会很慢。如果您在离岸位置,则提交速度会更慢。
如果您认为上述不是集中式版本控制与分布式版本控制的问题,那么您是绝对正确的。使用 CVCS,人们可以在不同的分支中工作,因此可以轻松避免上述 2 和 3。使用单独的一次性分支,我也可以根据需要提交尽可能多的内容,因为我可以创建另一个分支,在其中提交更完善的更改(解决 1)。但是,提交仍然可能很慢,因此 4 仍然可以应用。
使用 DVCS 的人通常会将他们的“本地”提交推送到远程服务器,作为穷人的备份解决方案。他们不会推送到团队其他成员正在工作的主服务器,而是推送到另一个(可能是私有的)服务器。这样他们就可以独立工作,并且仍然保留异地备份。
是的,我也不喜欢这种论点。我在 99% 的时间里都有良好的互联网连接,而且飞得不够多,这不是一个问题 :-)
然而,真正的论据不是你离线,而是你可以假装离线。更准确地说,您可以独立工作,而无需立即将更改发送到中央存储库。
DVCS 工具是围绕人们可能离线工作的想法而设计的。这有许多重要的后果:
合并分支成为一件很自然的事情。当人们可以并行工作时,提交图中自然会出现分叉。因此,这些工具必须非常擅长合并分支。像SVN这样的工具不太擅长合并!
Git、Mercurial 和其他 DVCS 工具合并得更好,因为它们在这方面进行了更多测试,而不是直接因为它们是分布式的。
更大的灵活性。使用 DVCS,您可以自由地在任意存储库之间推送/拉取更改。我会经常在我的家庭和工作计算机之间进行推/拉,而不使用任何真正的中央服务器。当事情准备好发布时,我会将它们推送到像 Bitbucket 这样的地方。
多站点同步不再是“企业功能”,而是内置功能。因此,如果您有一个离岸位置,他们可以设置一个本地中心存储库并在他们之间使用它。然后,您可以每天或在适合您的时候同步本地集线器的小时数。hg pull
这只需要一个运行或git fetch
定期运行的 cronjob 。
更好的可扩展性,因为更多的逻辑在客户端。这意味着中央服务器上的维护更少,客户端工具更强大。
使用 DVCS,我希望能够通过代码的修订(不仅仅是提交消息)进行关键字搜索。使用集中式工具,您通常需要设置额外的索引工具。