1. 程式人生 > >版本控制工具 git與svn(分散式vs集中式)

版本控制工具 git與svn(分散式vs集中式)

版本控制:即記錄一個或若干檔案內容變化,以便將來查閱特定版本修訂情況以及回溯的系統。

集中式–svn

SVN, 全名Subvision; 作為集中式版本控制工具,版本庫集中存放在中央伺服器,team裡每個人work時從中央伺服器下載程式碼,是必須聯網才能工作。個人修改後然後提交到中央版本庫;對比最早的版本控制工具–cvs,svn解決了cvs的不穩定性,現在是開源社群的主流集中式版本控制工具。

Subversion的特點:

1.每個版本庫有唯一的URL(官方地址),每個使用者都從這個地址獲取程式碼和資料;

2.獲取程式碼的更新,也只能連線到這個唯一的版本庫,同步以取得最新資料;

3.提交必須有網路連線(非本地版本庫);

4.提交需要授權,如果沒有許可權,提交會失敗;

5.提交併非每次都能夠成功。如果有其他人先於你提交,會提示“改動基於過時的版本,先更新再提交”;

6衝突解決是一個提交速度的競賽:手快者,先提交,平安無事;手慢者,後提交,可能衝突.(建議每次提交前update);

分散式–git

Git ,開源的分散式版本控制系統,是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。分散式相比於集中式的最大區別在於開發者可以提交到本地,每個開發者通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫。

Git的特點:

1.Git中每個克隆(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來建立屬於你自己的版本庫,同時你的版本庫也可以作為源提供給他人。

2.Git的每一次提取操作,實際上都是一次對程式碼倉庫的完整備份。提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交總是會成功。

3.甚至基於舊版本的改動也可以成功提交,提交會基於舊的版本建立一個新的分支。

4.Git的提交不會被打斷,直到你的工作完全滿意了,PUSH給他人或者他人PULL你的版本庫,合併會發生在PULL和PUSH過程中,不能自動解決的衝突會提示您手工完成。

5.衝突解決不再像是SVN一樣的提交競賽,而是在需要的時候才進行合併和衝突解決。

優缺點對比(面試常見)

SVN優點: 1、 管理方便,邏輯明確,符合一般人思維習慣。 2、 易於管理,集中式伺服器更能保證安全性。 3、 程式碼一致性非常高。 4、 適合開發人數不多的專案開發。 缺點: 1、 伺服器壓力太大,資料庫容量暴增。 2、 如果不能連線到伺服器上,基本上不可以工作,看上面第二步,如果伺服器不能連線上,就不能提交,還原,對比等等。 3、 不適合開源開發(開發人數非常非常多)。但是一般集中式管理的有非常明確的許可權管理機制(例如分支訪問限制),可以實現分層管理,從而很好的解決開發人數眾多的問題。

Git優點: 1、適合分散式開發,強調個體。 2、公共伺服器壓力和資料量都不會太大。 3、速度快、靈活。 4、任意兩個開發者之間可以很容易的解決衝突。 5、離線工作。 缺點: 1、學習週期相對而言比較長。 2、不符合常規思維。 3、程式碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有程式碼和版本資訊。

總結:

工具沒有好壞,只有適不適合;集中式在傳統的企業團隊開發裡優勢明顯(推廣成本,安全性),而分散式面向開源專案,或者工作機制比較自由的團隊,個人。