GIT和svn的對比

2021-09-05 10:03:41 字數 3699 閱讀 1128

svn是subversion的簡稱,是乙個開放源**的版本控制系統,支援大多數常見的作業系統。作為乙個開源的版本控制系統,subversion管理著隨時間改變的資料。

這些資料放置在乙個**資料檔案庫(repository)中。這個檔案庫很像乙個普通的檔案伺服器,不過它會記住每一次檔案的變動。

這樣你就可以把檔案恢復到舊的版本,或是瀏覽檔案的變動歷史。subversion是乙個通用的系統,可用來管理任何型別的檔案,其中包括了程式原始碼。

集中式**管理的核心是伺服器,所有開發者在開始新一天的工作之前必須從伺服器獲取**,然後開發,最後解決衝突,提交。所有的版本資訊都放在伺服器上。如果脫離了伺服器,開發者基本上可以說是無法工作的。下面舉例說明:

開始新一天的工作:

2、進入自己的分支,進行工作,每隔乙個小時向伺服器自己的分支提交一次**(很多人都有這個習慣。因為有時候自己對**改來改去,最後又想還原到前乙個小時的版本,或者看看前乙個小時自己修改了哪些**,就需要這樣做了)。

3、下班時間快到了,把自己的分支合併到伺服器主分支上,一天的工作完成,並反映給伺服器。

git是一款免費、開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的專案

git是乙個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。git 是 linus torvalds 為了幫助管理 linux 核心開發而開發的乙個開放原始碼的版本控制軟體。

分布式相比於集中式的最大區別在於開發者可以提交到本地,每個開發者通過轉殖(git clone),在本地機器上拷貝乙個完整的git倉庫.

git的功能特性:

從一般開發者的角度來看,git有以下功能:
1、從伺服器上轉殖完整的git倉庫(包括**和版本資訊)到單機上。
2、在自己的機器上根據不同的開發目的,建立分支,修改**。
3、在單機上自己建立的分支上提交**。
4、在單機上合併分支。
5、把伺服器上最新版的**fetch下來,然後跟自己的主分支合併。
6、生成補丁(patch),把補丁傳送給主開發者。
7、看主開發者的反饋,如果主開發者發現兩個一般開發者之間有衝突(他們之間可以合作解決的衝突),就會要求他們先解決衝突,然後再由其中乙個人提交。如果主開發者可以自己解決,或者沒有衝突,就通過。
8、一般開發者之間解決衝突的方法,開發者之間可以使用pull 命令解決衝突,解決完衝突之後再向主開發者提交補丁。
從主開發者的角度(假設主開發者不用開發**)看,git有以下功能:
1、檢視郵件或者通過其它方式檢視一般開發者的提交狀態。
2、打上補丁,解決衝突(可以自己解決,也可以要求開發者之間解決以後再重新提交,如果是開源專案,還要決定哪些補丁有用,哪些不用)。
3、向公共伺服器提交結果,然後通知所有開發人員。
1.svn屬於集中化的版本控制系統,有個不太精確的比喻:svn = 版本控制+ 備份伺服器

svn使用起來有點像是檔案倉庫的感覺,支援並行讀寫檔案,支援**的版本化管理,功能包括取出、匯入、更新、分支、改名、還原、合併等。

git是乙個分布式版本控制系統,操作命令包括:clone,pull,push,branch ,merge ,push,rebase,git擅長的是程式**的版本化管理。

2.git跟svn一樣有自己的集中式版本庫或伺服器。但,git更傾向於被使用於分布式模式,也就是每個開發人員從中心版本庫/伺服器上chect out**後會在自己的機器上轉殖乙個自己的版本庫。

可以這樣說,如果你被困在乙個不能連線網路的地方時,就像在飛機上,地下室,電梯裡等,你仍然能夠提交檔案,檢視歷史版本記錄,建立專案分支,等。對一些人來說,這好像沒多大用處,但當你突然遇到沒有網路的環境時,這個將解決你的**煩。

3.git把內容按元資料方式儲存,而svn是按檔案

所有的資源控制系統都是把檔案的元資訊隱藏在乙個類似.svn,.cvs等的資料夾裡。如果你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。

因為,.git目錄是處於你的機器上的乙個轉殖版的版本庫,它擁有中心版本庫上所有的東西,例如標籤,分支,版本記錄等。

4.分支在svn中一點不特別,就是版本庫中的另外的乙個目錄。如果你想知道是否合併了乙個分支,你需要手工執行像這樣的命令svn propget svn:mergeinfo,來確認**是否被合併。

然而,處理git的分支卻是相當的簡單和有趣。你可以從同乙個工作目錄下快速的在幾個分支間切換。你很容易發現未被合併的分支,你能簡單而快捷的合併這些檔案。

5.git沒有乙個全域性的版本號,而svn有

目前為止這是跟svn相比git缺少的最大的乙個特徵。你也知道,svn的版本號實際是任何乙個相應時間的源**快照。我認為它是從cvs進化到svn的最大的乙個突破。

6.git的內容完整性要優於svn:

git的內容儲存使用的是sha-1雜湊演算法。這能確保**內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。 

2.git優缺點

優點: 

1、適合分布式開發,強調個體。 

2、公共伺服器壓力和資料量都不會太大。 

3、速度快、靈活。 

4、任意兩個開發者之間可以很容易的解決衝突。 

5、離線工作。 

缺點: 

1、學習週期相對而言比較長。 

2、不符合常規思維。 

3、**保密性差,一旦開發者把整個庫轉殖下來就可以完全公開所有**和版本資訊。

1)適用物件不同。git適用於參與開源專案的開發者。他們由於水平高,更在乎的是效率而不是易用性。svn則不同,它適合普通的公司開發團隊。使用起來更加容易。

2)使用的場合不同。git適用於通過internet,有多個開發角色的單個專案開發,svn適合企業內部由專案經理統一協調的多個並行專案的開發。

3)許可權管理策略不同。git沒有嚴格的許可權管理控制,只要有帳號,就可以匯出、匯入**,甚至執行回退操作。

svn則有嚴格的許可權管理,可以按組、按個人進行針對某個子目錄的許可權控制。區分讀、寫許可權。更嚴格的,不支援回退操作。保證**永遠可以追蹤。

4)分支(branch)的使用範圍不一樣。git中,你只能針對整個倉庫作branch,而且一旦刪除,便無法恢復。而svn中,branch可以針對任何子目錄,它本質上是乙個拷貝操作。

所以,可以建立非常多、層次性的branch,並且,在不需要時將其刪除,而以後需要時只要checkout老的svn版本就可以了。

5)基於第三點,git適用於單純的軟體專案,典型的就是一些開源專案,比如linux核心、busybox等。相反,svn擅長多專案管理。

比如,你可以在乙個svn倉庫中存放乙個手機專案的bsp/設計文件/檔案系統/應用程式/自動化編譯指令碼,或者在乙個svn中存放5款手機專案的檔案系統。git中必須建立n(專案數)*m(元件數)個倉庫。svn中只需要最多n或者m個就可以了。

6)git使用128位id作為版本號,而且checkout時要註明是哪個branch,而svn使用乙個遞增的序列號作為全域性唯一的版本號,更加簡明易懂。雖然可以使用gittag來建立一些文字化的別名,但是畢竟那只是針對特殊版本。

7)可跟蹤性,git的典型開發過程為:建立分支,進行開發,提交到本地master,刪除分支。這樣做的後果是以前的修改細節會丟失。而在svn下做同樣的事情,不會丟失任何細節。

8)區域性更新,區域性還原。svn由於是在每個資料夾建立乙個.svn資料夾來實現管理,所以可以很簡單實現區域性更新或者還原。假如你只希望更新某些部分,則svn可以很好實現。

同時**寫錯了,同時可以很好實現區域性還原,當然git也可以通過歷史版本還原,但是無法簡單地實現區域性還原。

SVN和Git的對比

svn subversion 是集中式管理的版本控制器,而git是分布式管理的版本控制器!這是兩者之間最核心的區別。svn只有乙個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過客戶端連到這台伺服器,取出最新的檔案或者提交更新。git每乙個終端都是乙個倉庫,客戶端並不只提取最新...

關於Git和SVN的對比

1.git的提交是乙個dag有向無環圖.可以看到各個分支之間的合併關係.svn的提交是一條直線.2.git的提交版本號不是乙個簡單遞增的數字,而是乙個長達40位的十六進製制數字 雜湊值 但是可以適用剪短的格式.只要不衝突.git的提交都記錄了父提交甚至是雙親或者多親提交,因此可以很容易的從任意 乙個...

關於Git和SVN的對比

1.git的提交是乙個dag有向無歡圖.可以看到哥哥分支之間的合併關係.svn的提交是一條直線.2.git的提交版本號不是乙個簡單遞增的數字,而是乙個長達40位的十六進製制數字 雜湊值 但是可以適用剪短的格式.只要不衝突.git的提交都記錄了父提交甚至是雙親或者多親提交,因此可以很容易的從任意 乙個...