2009-07-22 83 views
10

分佈式版本控制系統的優點和缺點是什麼?分佈式版本控制系統的優缺點?

如果你有一個分佈式系統,如GitMercurialPlastic SCMetc. 請分享您的經驗,任何經驗。告訴我們什麼運作良好,哪裏出現問題。

我對傳統,商業,非開源項目中使用分佈式系統特別感興趣,但也歡迎有關其他用途的答案。

+1

http://stackoverflow.com/search?q=distributed+version+control – arathorn 2009-07-22 21:14:58

回答

6

問題sebasgo指出真的有很多很好的答案,但讓我告訴你我的無論如何個人經驗。我與遍佈美國的一小撮其他人一起工作,從事基本上私人的諮詢工作。客戶的規模不盡相同,但我們的團隊規模不大,而且我們的工作速度相當快。代碼是商業的,但在我們完成時由客戶擁有。

我們使用Mercurial,但具體的工具不如使用分佈式版本控制而不是集中式的一般工作流程重要。根據我的經驗有兩個優勢的生產力,我不再想不工作:

  1. 首先:分支和合並是容易的。這是分發的一個副作用,而不是嚴格的要求,但這對於DVCS是至關重要的,我認爲這對我的工作至關重要。我們每個人都可以自由地分配我們需要處理的每個功能,讓它在沙箱中工作(不受來自我們共享存儲庫的干擾),以及什麼時候我們準備好重新合併。「跟上」其他的變化就像偶爾合併一樣容易,可以選擇放棄合併,並繼續處理解決衝突是目前的太多努力。我們可以抓住特定的變化並將它們放在一個測試分支中,如果我們喜歡它們,可以保留結果,否則就拋棄它們。這種嘗試,分享,並保持最佳效果的能力是嚴重的好處。正如我所說,這不是一個我可以舒適地工作,沒有在這一點上。
  2. 脫機工作。這聽起來不是什麼大不了的事情,除非你在平常的環境下工作。我可以去度假,旅行,或者中斷,或者只是想在愉快的一天把我的筆記本電腦帶到戶外,繼續工作。能夠起牀走路而不需要停止工作,或失去檢查點我工作能力的心理好處是非常現實的。

除了這些影響適用於我所有的項目,與工作有關而不是影響我們特定安排的一個好處,它涉及到您的商業使用問題和意想不到的問題:客戶可以實際在代碼上工作。他們可以拍攝快照,進行本地更改,或者向我們發回修復或爲特定目的保留調整後的代碼。這對於讓他們參與進來有很大的幫助,不會與他們想要的東西有太大的不同步,並且允許他們在不破壞任何東西的情況下調整事物(除非他們準備好了,否則我們不會合並他們的變化 - 同樣的規則我們自己申請。)

我們沒有很多投訴。這需要一些習慣,儘管Mercurial的命令集足夠接近Subversion(我們曾經使用過),但我們並沒有遇到太多麻煩。即使偶爾會出現偶然性,比如意外檢查不應該檢入的二進制文件或文件,我們也可以避開,因爲我們可以在沒有這些更改的情況下重新創建存儲庫,並在需要時替換我們的主存儲庫。這並不能很好地擴展到一大羣人,但是對於一個3-4人的小團隊來說效果很好。

我可以想到的一個負面問題實際上是一個問題,是能夠輕鬆分支的副作用:您可以擁有足夠的未完成工作,但您失去了跟蹤工作。這有點類似於有許多書面文件的草稿:通過足夠的副本,你不記得哪個副本有你想要的更改。這並不是工具的直接缺陷,如果有的話,它可以比容易合併的工具更容易將不同的工作重新組合起來。但這是一個危險。我知道管理它的唯一方法是遵守有關編寫有用的提交日誌,有用的分支描述,而不是試圖一次保留太多的開放任務。換句話說,即使是一個非常好的工作流程仍然是一個工作流程,需要注意或者失控。 (我真的想命名分支支持只是位更容易)和Git(我真的希望命令集更直觀,即使是現在),但他們是投訴關於非常熟悉的角落問題。如果這些工具沒有推動我認爲VCS可以做的事情的範圍遠遠超出我在開始使用它之前所知道的範圍,他們甚至不可能實現。

2

我還沒有嘗試過其他分佈式系統,所以無法評論他們。但是讓Git煩惱的一件事是,無法只克隆部分存儲庫。 最後我檢查了一下,它也缺少類似svn:externals的東西。我發現svn externals經常用於檢查其他存儲庫中的庫等。

+1

您可以在git中定義子模塊,它允許您只克隆子模塊,但是,爲此,您的存儲庫必須具有該結構,您不能克隆時做。 – txwikinger 2009-07-22 21:12:25

+0

這是分佈式版本控制的概念,您作爲用戶必須在本地計算機上擁有完整的回購。請記住,只有當您將項目克隆到本地計算機時,您才能獲得所有內容。下拉將只給你改變。 – 2013-01-23 23:43:57

3

閱讀關於GIT vs SVN以及中央VS分佈式系統的大量信息的stackoverflow上的這個question

2

是的,簽出這個stackoverflow問題。如果你想了解更多關於Git如何與其他版本控制系統進行比較的信息,有一個很好的信息網站:Why Is Git Better Than X?