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