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

相关文章
相关标签/搜索