Git
与SVN
都是版本控制系统,版本控制是指对软件开发过程当中各类程序代码、配置文件及说明文档等文件变动的管理,是软件配置管理的核心思想之一,最主要的功能就是追踪文件的变动。html
SVN
是集中式管理的版本控制器,而Git
是分布式管理的版本控制器,这是二者之间最核心的区别。
SVN
只有一个单一的集中管理的服务器,保存全部文件的修订版本,而协同工做的人们都经过客户端连到这台服务器,取出最新的文件或者提交更新。
Git
每个终端都是一个仓库,客户端并不仅提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来,每一次的提取操做,实际上都是一次对代码仓库的完整备份。
相对来讲分布式管理系统功能更强大一些,但一样的上手难度也就高一些,固然分布式代码版本管理系统并不必定适合全部团队,好比中小团队可能更关心的只是成本更低,简单易用,那么SVN
等这类集中式版本管理工具仍是更为适合,可是无论团队最终选用什么代码版本管理工具,只要适合本身的团队的开发流程和工做方式,而且代码管理顺畅就能够了。git
差别 | SVN | Git |
---|---|---|
系统特色 | 1. 集中式版本控制系统,文档管理很方便。 2. 企业内部并行集中开发 3. windows 系统上开发推荐使用 4. 克隆一个拥有将近一万个提交 commit ,五个分支,每一个分支有大约1500 个文件,用时将近一个小时 |
1. 分布式系统,代码管理很方便。 2. 开源项目开发。 3. Mac 、Linux 系统上开发推荐使用。 4. 克隆一个拥有将近一万个提交 commit 、五个分支、每一个分支有大约1500 个文件,用时1 分钟。 |
灵活性 | 1. 搭载SVN 的服务器若是出现故障,就没法与之交互。 2. 全部的 SVN 操做都须要中央仓库交互,例如拉分支,看日志等。 |
1. 能够单机操做,Git 服务器故障也能够在本地Git 仓库工做。 2. 除了 push 和pull 或fetch 操做,其余均可以在本地操做。 3. 根据本身开发任务任意在本地建立分支。 4. 日志都是在本地查看,效率较高。 |
安全性 | 较差,按期备份,而且是整个SVN 都得备份。 |
较高,每一个开发者的本地就是一套完整版本库,记录着版本库的全部信息。 |
分支方面 | 1. 拉分支更像是copy 一个路径。 2. 可针对任何子目录进行 branch 。 3. 拉分支的时间较慢,由于拉分支至关于 copy 。 4.建立完分支后,影响所有成员,每一个人都会拥有这个分支。 5.多分支并行开发较重,工做较多并且繁琐。 |
1. 我能够在Git 的任意一个提交点commit point 开启分支。 2. 拉分支时间较快,由于拉分支只是建立文件的指针和 HEAD 。 3. 本身本地建立的分支不会影响其余人。 4. 比较适合多分支并行开发。 5. Git checkout hash 切回以前的版本,无需版本回退。 6. 强大的 cherry-pick 。 |
工做流程 | 1. 每次更改文件以前都得update 操做,有的时候修改过程当中这个文件有更新,commit 不会成功。 2. 有冲突,会打断提交动做,冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。 |
1. 开始工做前进行fetch 操做,完成开发工做后push 操做,有冲突解决冲突。 2. Git 的提交过程不会被打断,有冲突会标记冲突文件。 3. Gitflow 经典流程。 |
内容管理 | SVN 对中文支持好,操做简单。 |
对程序的源代码管理方便,代码库占用的空间少,易于分支化管理。 |
学习成本 | 使用起来更方便,SVN 对中文支持好,操做简单。 |
更在意效率而不是易用性,成本较高,有不少独有的命令如rebase 、远程仓库交互的命令等等。 |
权限管理 | SVN 的权限管理至关严格,能够按组、我的针对某个子目录的权限控制,每一个目录下都会有个.SVN 的隐藏文件。 |
Git 没有严格的权限管理控制,只有帐号角色划分。 |
管理平台 | 有功能很是完善的插件。 | 除功能插件外,还有Gitlab 、Gerrit 、Github 等。 |
https://Github.com/WindrunnerMax/EveryDay
https://juejin.cn/post/6844903619813179405 https://www.cnblogs.com/ssgeek/p/9642171.html https://www.cnblogs.com/Sungeek/p/9152223.html