Git与Svn的主要不同点
1. Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本地提交;
2. Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,SVN却需要联网;
3. Git鼓励分支,在Git实际开发中分支的分离和merge是属于日常操作,开启和合并分支成本相比SVN要小得多:SVN是复制一份代码到分支目录,Git则是在分支点做一下标记,随便一次冲突就会自动产生分支
而SVN,SVN通过自带的Branch merge,有merge时用的是Beyond Compare工具合并后再Commit的
4.Git支持本地回滚,可以减少中央库上的冗余版本。而svn是不支持回滚的
5. SVN在Commit前,我们都建议是先Update一下,跟本地的代码编译没问题,并确保开发的功能正常后再提交,这样会挺麻烦的,如果有时没有先Updata,就
Commit,会发生了一些错误,耽误时间,Git可能这种情况会少些。
Git的劣势
版本号不好看。比起SVN那样简短的整数,长长的SHA1比较难记忆和对比,不过分布式也没有办法统一成整数的形式;
操作比较繁琐,加进cache要add,提交本地库要commit,提交远程库还要再push,相关概念也比较多;
没有比较完善的访问权限控制,这个大概是最严重的问题了,不能为每一个人单独配置相关的访问权限。也许开源社区里面不需要,但是不是所有的开发都是像开源社区那样大公无私的;
每个版本之间变化都非常大时不适用git。比如说可以用svn去管理binary release的各个版本,客户端可以选择checkout哪个branch或者tag;但如果用git,就得先全clone到本地
很难直接跟踪git仓库的某个子目录:必须clone整个仓库然后做subtree merge。而SVN则可以直接checkout/update某个子目录。
可能是跟Torvalds Linus本人亲自设计有关,和bash结合得比较密切,一些操作直接就是bash脚本,以至于至今在Windows下没有一个比较像样的客户端,居然还是需要用cygwin模拟一个linux环境;
两者模式不同:
svn 的模式是:
1、写代码。
3、从服务器拉回服务器的当前版本库,并解决服务器版本库与本地代码的冲突。
5、将本地代码提交到服务器。
分布式版本管理的模式是:
1、写代码。
2、提交到本地版本库。
3、从服务器拉回服务器的当前版本库,并解决服务器版本库与本地代码的冲突。
4、将远程库与本地代码合并结果提交到本地版本库。
5、将本地版本库推到服务器。