GIT与SVN世纪大战
Posted 伟大程序猿的诞生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIT与SVN世纪大战相关的知识,希望对你有一定的参考价值。
差 异 | 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都得备份 | 较高,每个开发者的本地就是一套完整版本库,记录着版本库的所有信息(gitlab集成了备份功能) |
分支方面 | 1.拉分支更像是copy一个路径 2.可针对任何子目录进行branch 3.拉分支的时间较慢,因为拉分支相当于copy 4.创建完分支后,影响全部成员,每个人都会拥有这个分支 5.多分支并行开发较重(工作较多而且繁琐) |
1.我可以在Git的任意一个提交点(commit point)开启分支!(git checkout -b newbranch HashId) 2.拉分支时间较快,因为拉分支只是创建文件的指针和HEAD 3.自己本地创建的分支不会影响其他人 4.比较适合多分支并行开发 5.git checkout hash值(切回之前的版本,无需版本回退) 6.强大的cherry-pick |
版本控制 | 1.保存前后变化的差异数据,作为版本控制 2.版本号进行控制,每次操作都会产生一个高版本号(svn的全局版本号,这是svn一个较大的特点,git是hash值) |
1.git只关心文件数据的整体发生变化,更像是把文件做快照,文件没有改变时,分支只想这个文件的指针不会改变,文件发生改变,指针指向新版本 2. 40 位长的哈希值作为版本号,没有先后之分 3.git rebase操作可以更好的保持提交记录的整洁 |
工作流程 | 1.每次更改文件之前都得update操作,有的时候修改过程中这个文件有更新,commit不会成功 2.有冲突,会打断提交动作(冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。) |
1.开始工作前进行fetch操作,完成开发工作后push操作,有冲突解决冲突 2.git的提交过程不会被打断,有冲突会标记冲突文件 3.gitflow流程(经典) |
内容管理 | svn对中文支持好,操作简单,适用于大众 | 对程序的源代码管理方便,代码库占用的空间少,易于分支化管理 |
权限管理 | svn的权限管理相当严格,可以按组、个人针对某个子目录的权限控制(每个目录下都会有个.svn的隐藏文件) | git没有严格的权限管理控制,只有账号角色划分(在项目的home文件下有且只有一个.svn目录) |
常用命令 | SVN命令 | GIT命令 |
---|---|---|
版本库初始化 | svnadmin create | git init |
导入数据 | svn import | git clone;git add;git commit |
版本库检出 | svn checkout | got clone |
工作区更新 | svn update | git pull |
切换至里程碑 | svn switch <url/of/tags/name> | git checkout <tag> |
切换至分支 | svn switch <url/of/branchs/name> | git checkout <branch> |
添加文件 | svn add | git add |
删除文件 | svn rm | git rm |
移动文件 | svn mv <old><new> | git mv <old><new> |
工作区差异比较 | svn diff | git diff |
回滚 | svn merge -r <rec> | git revert <commit_id>将之前的提交反转 git reset <commit_id>该commit_id之后的提交都会删除 |
分支合并 | svn merge <url/of/branch> | git merge <branch> |
删除分支 | svn rm <url/of/branch/name> | git branch -d <branch> |
提交拣选 | svn merge -c <rev> | git cherry-pick |
显示分支 | svn ls <url/of/branchs> | git branch |
显示里程碑 | svn ls <url/of/tags> | git tag |
更改提交说明 | svn ps -revprop -r<rev> svn:log “msg” | git commit –amend |
撤销提交 | svnadmin dump | git reset [–hard]HEAD^ |
GIT官网: https://git-scm.com/
欢迎长按下图 -> 识别图中二维码
⬇️
以上是关于GIT与SVN世纪大战的主要内容,如果未能解决你的问题,请参考以下文章