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)一次。
