Git比SVN好的地方主要在于,去中心化。添加了本地仓库管理。对于经常更新自己工作进度的用户,它能支持离线存版本,打Tag,也能较好保护远程代码不被污染,更好地支持版本控制在实际应用场景中的需要。 Git在开源界使用的更多,相比起来,SVN在企业界更吃香的主要原因,一是由于Linux, Windows不同操作系统下完善的工具支持。Linux下有纯命令行工具,Windows下有乌龟(Tortorise),可以查看代码修改、提交记录,撤销回滚,更新,轻而易举。 另一个是因为它们的权限管理有较大区别。曾经在Debian下使用过gitosis搭建git远程仓库,它的配置文件gitosis.conf格式如下:
1 2 3 |
|
Scott用户拥有项目iphone_project
的写权限,git的权限设置粒度是基于项目的,开源界行得通的规律在企业界就玩不转了。企业里,一个项目可能关系整个企业命脉,权限这种管理的很严格,所以更需要像SVN这种基于目录设定权限的控制方式。使用过svnserve搭建过SVN远程仓库,它的配置文件authz的格式如下:
1 2 3 4 |
|
在配置使用方面,SVN要比Git来的低效。比如想要设置忽略某种后缀文件,Git中,在Git工作区下建立一个名为.gitignore的文件,依次向其中写入你不需要git识别、提交的文件,git就不会对工作区中符合列表中条件的文件进行版本跟踪。.gitignore会被提交到仓库也影响对其他人提交的过滤,只在本地生效的方法是修改.git/info/exclude,书写规则相同,则不会影响其它人的设置。
SVN设置忽略要使用svn:ignore指令,旧版本的SVN更低效,每个文件夹底下有一个.svn,管理起来相当麻烦。据说新版的更改了这种管理方式。
把SVN仓库转换到Git仓库经典做法是使用官方提供的svn2git脚本。