Git是一款開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。 svn是一款開源的集中式版本控制系統,用於多個人共同開發同一個項目,實現共享資源,實現最終集中式的管理。
本教學操作環境:Windows7系統、Git2.30.0版、Dell G3電腦。
git是什麼
Git是一款免費、開源的分散式版本控制系統,用於敏捷且有效率地處理任何或小或大的專案
Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。 Git 是 Linus Torvalds 為了協助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。
分散式相比於集中式的最大差異在於開發者可以提交到本地,每個開發者透過複製(git clone),在本地機器上拷貝一個完整的Git倉庫。
Git屬於分散式的版本控制系統
#Git有下列特點:
#Git中每個克隆(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來創建屬於你自己的版本庫,同時你的版本庫也可以作為來源提供給他人,只要你願意。
Git的每一次提取操作,其實都是一次程式碼倉庫的完整備份。
提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交總是會成功。
甚至基於舊版的變更也可以成功提交,提交會基於舊的版本建立一個新的分支。
Git的提交不會被打斷,直到你的工作完全滿意了,PUSH給他人或他人PULL你的版本庫,合併會發生在PULL和PUSH過程中,無法自動解決的衝突會提示您手動完成。
衝突解決不再像是SVN一樣的提交競賽,而是在需要的時候才進行合併和衝突解決。
Git 也可以模擬集中式的工作模式
#Git版本庫統一放在伺服器中
可以授權Git 版本庫:誰能建立版本庫,誰能向版本庫PUSH,誰能讀取(複製)版本庫
團隊的成員先將伺服器的版本庫克隆到本地;並經常的從伺服器的版本庫拉(PULL)最新的更新;
團隊的成員將自己的改動推(PUSH)到伺服器的版本庫中,當其他人和版本庫同步(PULL)時,會自動取得改變
Git 的集中式工作模式非常靈活
你完全可以在脫離Git伺服器所在網路的情況下,如行動辦公室/出差時,照常使用程式碼庫
你只需要在能夠存取Git伺服器所在網路時,PULL和PUSH即可完成和伺服器同步以及提交
Git提供rebase 指令,可以讓你的改動看起來是基於最新的程式碼實現的變更
#Git 有更多的工作模式可以選擇,遠非Subversion可比
svn是什麼
提交需要授權,如果沒有寫入權限,提交會失敗;
# 提交並非每次都能夠成功。如果有其他人先於你提交,會提示「改動基於過時的版本,先更新再提交」… 諸如此類;
衝突解決是一個提交速度的競賽:手快者,先提交,平安無事;手慢者,後提交,可能遇到麻煩的衝突解決。
好處:每個人都可以在某種程度上看到專案中的其他人正在做些什麼。而管理者也可以輕鬆掌控每個開發者的權限。
缺點:中央伺服器的單點故障。
若是宕機一小時,那麼在這一小時內,誰都無法提交更新、還原、對比等,也就無法協同工作。如果中央伺服器的磁碟發生故障,而且沒做過備份或備份得不夠及時的話,還會有遺失資料的風險。最壞的情況是徹底丟失整個專案的所有歷史更改記錄,被客戶端提取出來的某些快照資料除外,但這樣的話依然是個問題,你不能保證所有的資料都已經有人提取出來。
svn原理上只關心文件內容的具體差異。每次記錄有哪些文件作了更新,以及都更新了哪些行的什麼內容。
svn和git適用範圍的不同
適用物件不同。
Git適用於參與開源專案的開發者。他們由於水平高,更在乎的是效率而不是易用性。 SVN則不同,它適合普通的公司開發團隊。使用起來更加容易。
使用的場合不同。
Git適用於透過Internet,有多個開發角色的單一專案開發,SVN適合企業內部由專案經理統一協調的多個平行專案的開發。
權限管理策略不同。
Git沒有嚴格的權限管理控制,只要有帳號,就可以匯出、匯入程式碼,甚至執行回退操作。 SVN則有嚴格的權限管理,可以依群組、按個人進行針對某個子目錄的權限控制。區分讀取、寫入權限。更嚴格的,不支援回退操作。保證代碼永遠可以追蹤。
分支(branch)的使用範圍不一樣。
Git中,你只能針對整個倉庫作branch,而且一旦刪除,便無法恢復。而SVN中,branch可以針對任何子目錄,它本質上就是一個拷貝操作。所以,可以建立非常多、層次性的branch,並且,在不需要時將其刪除,而以後需要時只要checkout老的SVN版本就可以了。
基於第三點,Git適用於單純的軟體項目,典型的就是一些開源項目,例如Linux核心、busybox等。相反,SVN擅長多專案管理。
例如,你可以在一個SVN倉庫中存放一個手機專案的bsp/設計文件/檔案系統/應用程式/自動化編譯腳本,或是在一個SVN中存放5款手機專案的檔案系統。 git中必須建立n(項目數)*m(元件數)個倉庫。 SVN中只需要最多n或m個就可以了。
Git使用128位元ID作為版本號,而且checkout時要註明是哪個branch;而SVN使用一個遞增的序號作為全域唯一的版本號,更簡潔易懂。雖然可以使用gittag來建立一些文字化的別名,但畢竟那隻是針對特殊版本。
可追蹤性
git的典型開發過程為:建立分支,進行開發,提交到本機master,刪除分支。這樣做的後果是以前的修改細節會遺失。
而在SVN下做同樣的事情,不會遺失任何細節。
局部更新,局部還原。
SVN由於是在每個資料夾建立一個.svn資料夾來實現管理,所以可以很簡單實現局部更新或還原。假如你只希望更新某些部分,svn可以很好實現。同時程式碼寫錯了,同時可以很好實現局部還原,當然git也可以透過歷史版本還原,但是無法簡單地實現局部還原。
推薦學習:《Git教學》
以上是git和svn是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!