前幾天同事問我多人協作代碼管理上的問題,建議他是用分支,目前項目使用的是SVN,因此就想到了Git和SVN的分支有很大區別
那SVN和Git都是有哪些區別呢?
1.Git是分布式的,SVN是集中式的
SVN必須有一個服務器版本庫就放在一個中央服務器。所有開發人員都是與服務器進行交互的。
Git更傾向於分布式開發,每台計算機上都有一個完整的本地版本庫,和服務器上的一模一樣。所以即使沒有網絡也一樣可以Commit,查看歷史版本記錄,創建項 目分支等操作。也有中心服務器,僅僅是為了方便交換大家的修改。
去中心化的好處?
操作處理速度快
安全性更高。Git每個人的電腦都有完整的版本庫,SVN集中式版本控制的中央服務器要是出了問題,所有人都沒法干活了,一次需要定期備份,並且是整個SVN都得備份
不依賴網絡
2.Git把內容按元數據方式存儲,而SVN是按文件
SVN保存前后變化的差異數據
Git只關心文件數據的整體發生變化,更像是把文件做快照,文件沒有改變時,分支只想這個文件的指針不會改變,文件發生改變,指針指向新版本
3.Git沒有一個全局版本號,而SVN有
SVN版本號進行控制,每次操作都會產生一個高版本號
Git采用40 位長的哈希值作為版本號,沒有先后之分
4. Git的內容的完整性要優於SVN
GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞
5.分支不同
Svn 創建分支,其實就是創建了一個新的文件夾(目錄)並擁有實際的文件的。相當於拷貝了一份源文件。創建完分支后,影響全部成員,每個人都會擁有這個分支。拉分支相當於copy時間較慢。多分支並行開發較重。
Git可以在任意一個提交點(commit point)開啟分支,並沒有創建文件夾,你甚至看不到任何的改變。創建一個分支,就是多了一個索引文件,記錄這個分支的變化,占用很小的空間。拉分支時間較快,拉分支只是創建文件的指針和HEAD。用戶可以在同一個文件夾中,快速的切換不同的分支。每個分支,都是獨立的,在這個分支里想做什么都可以,對其他分支沒有一點影響。比較適合多分支並行開發。
6.管理權限不同
svn的權限管理相當嚴格,可以按組、個人針對某個子目錄的權限控制
Git沒有嚴格的權限管理控制,只有賬號角色划分
7.工作流程不同
SVN每次更改文件之前都得update操作,有沖突,會打斷提交動作
Git開始工作前進行fetch操作,完成開發工作后push操作,有沖突解決沖突。git的提交過程不會被打斷,有沖突會標記沖突文件