使用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便利的優點. git