我認爲你會發現在實踐中開發人員更喜歡使用中央存儲庫,而不是在彼此的本地存儲庫之間進行推拉。一旦你克隆了一箇中央倉庫,在處理任何跟蹤分支時,獲取和推送都是簡單的命令。向所有同事的本地存儲庫添加六七個遠程控制檯是一件痛苦的事情,這些存儲庫可能並不總是可以訪問的(關掉電腦,在家裏拿一臺筆記本電腦等)。
在某些時候,如果你們都在同一個項目上工作,所有的工作都需要整合。這意味着您需要一個集成分支,將所有更改集中在一起。這自然需要在所有開發人員都可以訪問的地方,例如,它不屬於主要開發人員的筆記本電腦。
一旦建立了中央存儲庫,您就可以使用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的優勢在於創建這個中心分支幾乎是微不足道的。