SVN,Git等等,版本控制軟體哪款好?
SVN,Git等等,版本控制軟體哪款好?
除非必須要對大量的二進位文件進行版本管理,一般建議使用 Git
文無第一,武無第二。
程序員個人用的話,Git更合適一些。現在Github很流行,使用Git可以更好地參與到Github上的各種項目的使用和開發中去。當然如果能學會使用SVN的話就更好了,技多不壓身嘛。SVN本身也是很優秀的版本控制軟體。
在公司內部使用的話,需要考慮實際業務和領導的態度。譬如現在做Android開發的公司會用Git+Gerrit,互聯網業務會用Git+Gitlab,而做傳統軟體的公司可能還在用SVN或者一些不是很流行的軟體,譬如ClearCase,甚至還有些你連名字都沒聽過的版本控制軟體。SVN用來管理文檔、圖片、image文件等二進位文件是非常合適的,尤其是使用者不局限於程序員的場景。對於策劃、測試來說,SVN使用起來更加友好。領導的態度也很重要,胳膊擰不過大腿。如果領導比較保守,覺得Git難用、不安全什麼的,那麼就安心地用SVN吧。如果領導覺得不用Git不行的時候,自然會換的。譬如有些公司可用Git可用SVN,而客戶公司是用Git的,公司還堅持只用SVN的話,會被客戶鄙視的。
Git和SVN相比有幾個明顯的缺點:
- 學習曲線太陡了。要精通的話,需要花費大量的時間和精力去學習和練習。很多(懶惰的)碼農已經覺得Git很難用了,對於策劃、測試等來說更加是天書級別的,能準確地使用基本的幾個命令和操作已經很好了。
- 如果大型的二進位文件比較多的話,倉庫會很臃腫。雖然有些優化措施和擴展,但是因為第1點原因,一般用戶使用的時候會很難受。
- 自身沒有現成的許可權控制。一般通過託管服務來實現,譬如由Github,Gitlab,Gerrit等來完成。這要多維護一套系統,增加了成本。
但是如果你是一個程序員的話,學會並且精通這兩個工具,對工作是很有幫助的。
謝邀。
2018 年,該棄用 SVN 了。
如果不得已需要用到 SVN,請參考此回答: Mac 上最好用的 SVN 客戶端是什麼?
幾年過去,又有不少新的 Git GUI 出現,推薦 Fork - a fast and friendly git client for Mac 和 GitUp 。
建議用git,至於前面回答者提到的許可權問題,可以參考Openstack社區的管理思路,對於所有的代碼在merge前進行review,讓有許可權的人進行合併,解決許可權問題,或者分不同的項目來做。
瀉藥
我們公司最早用的是svn,用了大概4年時間,由於開發人員比較少,項目本身沒有版本的概念,就兩三個人協作,沒有什麼問題,但是,後來公司業務發展,人員擴張,svn的缺點太明顯了,基本沒用的分支,缺少版本管理的概念,完全無法適應稍微大一點的項目以及稍微多點人協作的項目,這個時候果斷選擇了git,依賴gitlab的強大功能,使用git很好的解決了svn帶來的痛點再說一下許可權控制,svn可以控制目錄許可權,git做不到,但是如果沒有項目完整代碼也無法完成開發測試,如果擔心許可權問題,可以從設計角度出發,不同的模塊分項目開發,也不用擔心不該擁有代碼的人拿到代碼就這樣,代碼管理沒有比git更好的選擇,建議個人用戶也選擇git,養成良好習慣謝邀
如果項目參與的人員不僅僅是開發,還有美術,產品,策劃等 優先svn,因為上手難度低,而且svn沒有歷史包袱,對於動輒幾百M甚至上G的美術作品而言不會造成代碼庫過於龐大(每一個美術同學修改過的版本都要進入所有人的git版本庫,可想而知多恐怖),對於非開發人員的誤操作容忍度極高。 如果介意svn的branch管理,則開發人員可以考慮自己本地建立一個git repo來操作,畢竟git不要求有服務端,感覺歷史包袱多了隨時可以推倒重來。當然如果想直接用git來管,svn拜拜,那麼git-svn歡迎你。同樣的道理還可以試著使用git來管理自己打算長期使用的第三方項目,你在這個項目上進行任何更改都不必擔心。
如果項目參與人員主要是開發,而且管理的內容主要是代碼文件,以及其他種類的小文件
建議git,其多版本管理能力和零碎文件處理效率不是svn能比的,至於歷史包袱,代碼文件很小,壓縮後更是小得不能再小。
SVN和Git兩者其實都很重要,
大概的用法:
SVN : pull, commit , push
Git : pull, add , commit ,push
基本用法上,就差一個 add
Git可以在本地,並且在你不聯網的時候可以良好的工作.而SVN你需要連到公司內網才能使用.
重點
兩者都必須要會,至少要會使用,因為總有公司會用得到. 況且兩者其實都挺簡單的,唯手熟爾
推薦閱讀:
※Android studio SVN 提交不到伺服器的原因?
TAG:軟體開發 | Git | SVNSubversion | 版本控制 |