git 與 svn 對比

git的使用不需要聯機
SVN集中式版本控制:每個人的版本都是送出到伺服器,伺服器壞了就雪崩。
git分布式版本控制: 安全,每人本地有個版本庫,每個人都可以充當‘伺服器
它的使用流程不需要聯機,可以先将對代碼的修改,儲存在本機。等上網之後,再實時推送過去。
送出代碼,檢視日志,推送具有閃電般的速度
git
送出是個本地操作,相對
svn
閃電一般。
本地包含了完整的日志,無需網絡
git向遠端伺服器推送送出内容相比svn更快
每個git存儲庫隻有一個git目錄
和 SVN不同,一個Git項目一般隻在項目的根目錄下建一個“.git”目錄,而SVN則會在項目的每一個目錄下建一個”.svn”目錄
git項目移植更友善
Git把所有的曆史送出資訊全部存儲在“Git目錄”裡,它就是一個Git項目的倉庫;你對本地的源代碼進行編輯修改後建立的送出也都會先儲存在這裡面,然後再推送到遠端的伺服器。當我們我把項目目錄和“Git目錄”一起拷到其它電腦裡,它能馬上正常的工作(所有的送出資訊全都儲存在Git目錄裡);甚至可以隻把“Git目錄”拷走也行,但是要再簽出(checkout)一次。
git支援tag屬性
svn
在模型上是沒有分支和
tag
的。
tag
是通過目錄權限限制(對開發隻讀)來保證不變。
git
模型上支援
tag
,保證隻讀。
合并對送出過程的保留
git
:合并操作保留原有的送出過程(即保留了合并來源的作者、送出次數、分離送出的内容)。
svn
:合并操作把來源多個送出合并成了一個合并送出,即在送出曆史中Crash了自然的送出過程。
更強大智能的合并能力
git
:重命名(無論檔案還有目錄)送出 , 可以合并上檔案重命名前的這些檔案的送出。
svn
:重命名(無論檔案還有目錄)送出後,你本地/或是分支上 有檔案重命名前的這些檔案的修改或送出,在做合并操作時,恭喜,你會碰上傳說中難搞的樹沖突!
因為懼怕
svn
樹沖突,在包名調整(重命名目錄)或類名調整(重命名檔案)前,我不得不先向一起開發的組員廣播:
- 送出你的修改
- 暫停相關類的修改
- 我開始做調整
- 等我修改好後,你再開始修改
廉價好用的本地分支
git
:有本地分支
svn
:無本地分支
git
可以友善建立本地分支,且建立分支的時間是
O(1)
,即瞬間就建立好了。由于分支可以是本地的,也就不存在
svn
目錄權限的問題。
git能保證資料的完整性
git中所有資料在存儲前都計算校驗和,然後以校驗來引用,是以你在傳輸中丢失檔案,git都知道。具備斷點續傳功能。
缺點
(1)git的入門,稍微有點麻煩,需要在本機建立一個ssh的鑰匙。
(2)圖形化操作界面不及svn那麼好用
git和github的關系
git是一個非常強大的版本管理工具。github則是一個基于git的日益流行的開源項目托管庫。