代码版本管理工具

代码版本管理工具

目前企业用的比较多的就是gitsvn了,那么我们就来简单比较一下svngit的情况,

本人使用svn较少,如果有svn方面错误的描述或说明,欢迎直接邮件怼我!努力改进!

Git优点:

  1. 分布式,每个参与开发的人的电脑上都有一个完整的仓库,不担心硬盘出问题;
  2. 在不联网的情况下,照样可以提交到本地仓库,可以查看以往的所有log,等到有网的时候,push到远程即可;
  3. 非常强大的分支管理功能。
  4. Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git缺点:

权限管理不是很方便,需要安装插件gitolite,配置有点麻烦,或者直接使用gitlab管理。

SVN优点

  1. 较好的权限管理功能,可以精确控制每个目录的权限;
  2. 使用相对git要简单一点。

SVN缺点

  1. 集中式,如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整文件;
  2. 分支功能没有git强大;
  3. 速度没有git快,如果有五个分支,是把五个分支的文件全部拷下来;
  4. 必须联网才能commit。

SVN和GIT在文件系统上的差异

  • 在文件上,SVN是对整个文件进行记录的,数据库中记录的是该文件的整体内容;而git是对操作的记录,比如在某个文件里删除一行,git即记录XX文件(-)129 Line
  • git基本原理

    png

    盗用别人的图说明一下

    值得说明一下的是,除了远程仓库外,其他的都是在本地电脑的

    git VS SVN 的操作

  • Update & (Pull | Fetch)

    svn update是从远程代码仓把文件copy到本地 git pull是从远程代码仓把开发者对文件的操作执行到本地 git fetch是从远程代码仓把开发者对文件的操作保存到本地

    眼光可以的应该发现,svn是把文件copy下来的,git是对操作进行处理; 什么是操作呢?

    比如有一个文件README.md,其内容刚开始是空文件; 第一个操作是添加一行WaterBall说明 ** 第二个操作是尾行添加一行第一个代码版本迁移自svn的132131 ** git 获取第一个操作并执行后是

    WaterBall说明
    

    git 获取第二个操作并执行后是

    WaterBall说明
    第一个代码版本迁移自svn的132131
    

    第二不操作只有一个叫做Add 第一个代码版本迁移自svn的132131的,而不是把整个README.mdcopy下来,如果在第二个操作执行前我们删掉行WaterBall说明,那么第二个操作后得到的文件是:

    第一个代码版本迁移自svn的132131
    

    git fetch只是把远程仓的日志,操作记录到本地,不会执行,所以不会对本地文件产生影响(fetch比较少用)

  • Commit & Push

    svn commit也是文件进行copy,把本地文件copy到远程代码仓 git commit是文件比较差异后,提交差异到本地记录 git push是把已经提交到本地的差异记录提交到远程代码仓(通过TortoiseGit把git commitgit push合并成为Commit & push,一键处理)

分支

  • SVN的分支在我看来,就像是一个仓一样,切一个分支,就要另起一个工程,尤其是Unity资源在没有CacheServer的情况下就更惨了!!!
  • git的分支就方便多了,在原工程下,直接切换就可以了