歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

SVN+GIT=魚與熊掌兼得

使用git已經有一段時間了,從使用git的第一天開始,就計劃逐步放棄svn.
 
svn有的功能,git都能做到,而且做得更出色,況且git還有很多特性svn望塵莫及,還有什麼理由繼續使用svn呢?
 
well,理由很多. 比如,git在windows上的性能問題, TortoiseGIT還沒有開發出來(或者根本沒有這個計劃?),團隊中其它人員不習慣用git....等等.
 
那麼,魚與熊掌,能否兼得?
 
=== SVN 之痛與癢===
 
svn的最大問題是不支持分布式開發. 分布式並不一定就是指象Linux Kernel那樣的大型協作開發場景.
 
例如,你想把沒做完的工作帶回家做,但是家裡又不能連線到公司的svn服務器,那麼你就不能commit. 實際上,這也是一種分布式開發的場景.
 
你會說,那你就不要commit啊... 我辦不到, 我有個壞習慣,經常做些小改動,但是十分鐘後就後悔了想改回來,只有經常commit我才能找回上次,上上次變更.
 
當然,我有壞習慣因此我不會commit到trunk或主branch上,否則會被扁死:-)
所以,我經常有很多臨時branch要merge,頻率非常之高...在svn中的merge並不好玩.
 
不得不說,svn的repository設計很糟糕. 慢, 特別是在項目規模上去,開發周期長時,repository迅速膨脹.項目樹中到處都是.svn也是很討厭.
 
但是, TortoiseSVN實在是方便, 很多人使用SVN就是因為圖這個方便.
支持SVN的IDE也數不勝數.
 
SVN,既痛又癢....
 
=== GIT 的威力===
 
git很快,真的很快,比小李飛刀還快...(當然是在Linux下).
試試checkout Linux Kernel的各個tag,那個速度,不得不佩服,呵呵~
 
其實對於小項目來說,速度倒無所謂,不差那麼幾秒,git還有很多cool things.
 
git diff很強大,真的很強大.比較任何兩個歷史版本,速度飛快.
 
git中做branch簡直太簡單了,branch merge也是非常的爽,更不用說three way merge了. 當然還有很多很cool的特性,例如,與別人的git tree進行merge ... 其實這些或多或少都是由於分布式的特性帶來的.
 
還有那些通過email commit等等一般小團隊開發用不到的功能,就不多說了.
 
=== 魚與熊掌兼得===
 
首先,svn照用,主版本管理用svn(照顧團隊嘛).
 
然後在項目目錄下建git repository: git init.
這只在項目根目錄下多出一個.git目錄,不會象svn或cvs那樣,每個子目錄都有它的垃圾.
 
接下來,建立.gitignore文件,把不需要git管理的文件,加入此表,例如.svn. 或者進入.git/info編輯exclude文件.
 
加入git: git add .
 
完成了,就這麼簡單.
 
從此以後,小的,臨時的改動,通通用git來管理,又快又准,還不影響別人. 因為你只用到本地git repository,與其他人無關.
 
各人建各人自己的git tree,互不干擾. 當然,如果你想日後某一天可以merge別人的tree,那麼還是建一個bare public tree吧, 各人clone一個,然後工作在自己的branch下,平時還是照樣離線commit,需要時push.
 
在家裡工作?沒問題,照樣可以commit,git是分布式的.
 
回到公司後,想commit到svn?沒問題,在git中checkout你想要的"working code"版本,再在svn中commit, 然後git再checkout HEAD,繼續前行
 
=== 結論===
 
svn和git結合, 可以帶來以下好處:
1) 與單獨使用svn的其它組員不沖突
2) 享受git分布式帶來的好處
3) 可以滿足svn commit working code的需求
4) svn大粒度管理,減輕svn repository的壓力.
5) svn繼續發揮GUI便利的優勢.
 
所以, SVN + GIT = 魚與熊掌兼得
 
 
有趣的是,Linus當時設計git的時候,說:"...當碰到一個特性不確定應該采取什麼樣的設計時,就只要照著svn的反方向設計就對了..."


摘自 Step Third
Copyright © Linux教程網 All Rights Reserved