前言
这篇博文并不是要排挤哪个工具,但出于第一印象和本人对于Linus的崇拜,难免带有感情色彩。
命令对照
svnadmin create ------------------------------> git init
svn co ------------------------------> git clone
svn update ------------------------------> git pull
svn add ------------------------------> git add
svn commit ------------------------------> git add, git commit
svn status ------------------------------> git status
svn switch ------------------------> git checkout
svn merge ------------------------> git merge
svn revert ------------------------------> git checkout
分支管理
git是把内容按元数据方式存储,简单么来说你写代码的所有分支和记录都放在.git文件夹内,所以git的仓库比较大;而svn是按文件的形式来组织的,一个分支一个文件夹。这种不懂直接导致了对于分支管理的不同。svn的branch和tag其实就是从trunk上copy出来的代码,以文件夹的形式存在,你能很直观的在branches文件夹下看到;而git的话因为信息存在.get文件夹下,要看分支信息就只能用git branch命令看了。svn的switch命令我感到很不好用,相对git checkout就简单很多,反正我们只关心当前工作目录。对此,写一个小脚本来切换在nginx下的root目录。
分布式
众所周知git是分布式的,其好处很明显,commit不用连网,本地的管理和仓库相对独立,自由度很大(特别是stash的应用);svn commit需要连网。
易用性
由于设计理念和历史原因,svn的可视化支持非常好;git的话用过一些可视化版本或者编辑器、ide插件,但都不及直接命令行好用。
代码管理过程
一下以RabbitVCS为例说一下svn管理流程。
checkout到本地
如果修改的幅度很小,可以选择把要修改的文件或者分支上锁,修改,合并到trunk,提交
如果修改比较大,可以不要请求锁,当修改完代码后要检查(diff)一下本地文件是否和远程的相适应(可能别人也提交了代码,但不影响自己的修改),如果适应就可以提交了,如果不适应(冲突)就要做排除冲突的工作再提交