我认为你会发现在实践中开发人员更喜欢使用中央存储库,而不是在彼此的本地存储库之间进行推拉。一旦你克隆了一个中央仓库,在处理任何跟踪分支时,获取和推送都是简单的命令。向所有同事的本地存储库添加六七个远程控制台是一件痛苦的事情,这些存储库可能并不总是可以访问的(关掉电脑,在家里拿一台笔记本电脑等)。
在某些时候,如果你们都在同一个项目上工作,所有的工作都需要整合。这意味着您需要一个集成分支,将所有更改集中在一起。这自然需要在所有开发人员都可以访问的地方,例如,它不属于主要开发人员的笔记本电脑。
一旦建立了中央存储库,您就可以使用cvs/svn样式工作流来检入和更新。如果你有局部更改,cvs update会变成git fetch和rebase,或者如果你没有git pull, cvs commit成为git commit和git push。
通过此设置,您与完全集中的VCS系统处于类似的位置。一旦开发人员提交他们需要做的更改(git push),以便其他团队可以看到,他们将在中央服务器上进行备份。
在这两种情况下需要遵守规定的是防止开发人员长时间将更改保留在中央存储库之外。我们大多数人可能在一个开发人员正在研究特性“x”的情况下工作,这需要对某些核心代码进行根本性改变。这种改变将导致其他人需要完全重建,但该功能还没有准备好主流,所以他只是保持检查,直到适当的时间点。
尽管存在一些实际差异,但两种情况的情况非常相似。使用git,因为你可以执行本地提交并可以管理本地历史记录,所以对个人开发人员而言,推送到中央存储库的需求可能不会像使用cvs那样感受到。
另一方面,可以使用本地提交作为优势。将所有本地提交推送到中央存储库上的安全位置应该不是很困难。本地分支可以存储在开发人员特定的标签名称空间中。
例如,对于Joe Bloggs,可以在他的本地存储库中制作别名以响应(例如)git mybackup
执行类似于以下的操作。
git push origin +refs/heads/*:refs/jbloggs/*
这是一个可以在任何时候(如一天结束)一起使用,以确保他的所有本地更改都安全地备份一个命令。
这有助于各种灾难。乔的机器爆炸了,他可以使用另一台机器取回已保存的提交并继续从他离开的地方继续。乔生病了?弗雷德可以让乔的分支去抓住他昨天做出的'必须有的'修正,但是没有机会对主人进行测试。
回到原来的问题。 dVCS和集中式VCS之间是否需要有所区别?你说半实现的功能和错误修正不会在dVCS案例中的中央存储库上结束,但我会争辩说不需要任何区别。
我已经看到很多情况下,使用集中式VCS时,半实施功能停留在一个开发人员工作箱上。它要么采取允许将一半书面特征检入主流的策略,要么决定创建一个中央分支。
在dVCS中可能发生同样的事情,但应该做出同样的决定。如果有重要但不完整的工作,则需要集中保存。 git的优势在于创建这个中心分支几乎是微不足道的。