代码版本管理工具
目前企业用的比较多的就是git
和svn
了,那么我们就来简单比较一下svn
和git
的情况,
本人使用
svn
较少,如果有svn
方面错误的描述或说明,欢迎直接邮件怼我!努力改进!Git优点:
- 分布式,每个参与开发的人的电脑上都有一个完整的仓库,不担心硬盘出问题;
- 在不联网的情况下,照样可以提交到本地仓库,可以查看以往的所有log,等到有网的时候,push到远程即可;
- 非常强大的分支管理功能。
- Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
Git缺点:
权限管理不是很方便,需要安装插件gitolite,配置有点麻烦,或者直接使用gitlab管理。
SVN优点
- 较好的权限管理功能,可以精确控制每个目录的权限;
- 使用相对git要简单一点。
SVN缺点
- 集中式,如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整文件;
- 分支功能没有git强大;
- 速度没有git快,如果有五个分支,是把五个分支的文件全部拷下来;
- 必须联网才能commit。
SVN和GIT在文件系统上的差异
- 在文件上,SVN是对整个文件进行记录的,数据库中记录的是该文件的整体内容;而git是对操作的记录,比如在某个文件里删除一行,git即记录XX文件(-)129 Line
- git基本原理
盗用别人的图说明一下
值得说明一下的是,除了
远程仓库
外,其他的都是在本地电脑的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.md
copy下来,如果在第二个操作执行前我们删掉行WaterBall说明
,那么第二个操作后得到的文件是:第一个代码版本迁移自svn的132131
git fetch
只是把远程仓的日志,操作记录到本地,不会执行,所以不会对本地文件产生影响(fetch比较少用) - Commit & Push
svn commit
也是文件进行copy,把本地文件copy到远程代码仓git commit
是文件比较差异后,提交差异到本地记录git push
是把已经提交到本地的差异记录提交到远程代码仓(通过TortoiseGit把git commit
和git push
合并成为Commit & push
,一键处理)
分支
- SVN的分支在我看来,就像是一个仓一样,切一个分支,就要另起一个工程,尤其是Unity资源在没有CacheServer的情况下就更惨了!!!
- git的分支就方便多了,在原工程下,直接切换就可以了
PREVIOUSUnity Animation优化
NEXTUnity GitLab CI