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的日益流行的開源專案託管庫。
Git把所有的歷史提交資訊全部儲存在“Git目錄”裡,它就是一個Git專案的倉庫;你對本地的原始碼進行編輯修改後建立的提交也都會先儲存在這裡面,然後再推送到遠端的伺服器。當我們我把專案目錄和“Git目錄”一起拷到其它電腦裡,它能馬上正常的工作(所有的提交資訊全都儲存在Git目錄裡);甚至可以只把“Git目錄”拷走也行,但是要再簽出(checkout)一次。