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

相關文章
相關標籤/搜索