SVN食用说明
前言
在很多游戏公司,通过游戏体量和团队体量会有很多公司使用SVN(包括我公司),
主要原因在于SVN对于二进制文件比起Git来说适配,以及对于非技术人员(美术和策划)有着很低的学习成本
一、介绍
SVN是什么?
SVN 是一种代码版本管理工具,它具有以下功能:
- 记住每次的修改
- 查看所有的修改记录
- 恢复到任何历史版本
- 恢复已经删除的文件
SVN跟Git相比的优势
- 使用简单,上手快
- 目录级权限控制,企业安全必备
- 子目录 Checkout,减少不必要的文件检出
主要应用
- 开发人员用来做代码的版本管理
- 用来存储一些重要的文件,比如合同
- 公司内部文件共享,并且能按目录划分权限
SVN仓库推荐
- svnbucket.com(SVN桶),目前最好用的 SVN 服务
安装SVN客户端
- TortoiseSVN (windows)
- Cornstone (mac)
二、SVN基本操作
- 检出 checkout
操作步骤 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
操作 | TortoiseSVN | checkout | URL of repository | Checkout directory | user,password |
说明 | 打开乌龟(bushi) | 检出 | 填写版本库URL | 填写检出目录/本地工作区位置 | 输入用户名和密码 |
有绿色的勾就代表已经把库拉到本地了,绿色勾代表和服务器一样的
- 新增add
- 提交 commit
SVN commit 提交 最好选择你需要提交的文件 不要全提交
(在游戏开发中有很多meta文件会被引擎修改)
更新 update
SVN update 会覆盖掉本地的文件,绿色勾代表和服务器一样的
如果想要本地完全为服务器的话可以把修改的内容给删除重新拉
历史记录show log
show log 会看到版本提交的文件以及commit信息
三、 撤销和恢复 Revert
- 撤销本地修改
本地直接某个文件Revert(SVN还原),就会把你修改的还原成服务器一样的文件
- 撤销已提交内容
提交完发现代码有问题
在show log中 右键
Revert changes from this revision(恢复此版本中的更改) ->使得本地变成上一个版本
然后去重新commit 并且 commit log 打上 “ revert ”
恢复到指定版本
在show log中
右键
Revert to this revision(复原到此版本)
四、添加忽略
选中文件 使用 Unversion and add to ignore list
对于忽略的文件如果在服务器的话那么就会被删除
五、SVN冲突
什么情况容易发生冲突?
多个人修改了同个文件的同行
无法进行合并的二进制文件
怎么避免冲突?
经常update同步下他人的代码
二进制文件不要多个人同时操作
冲突了怎么办?
解决冲突很简单,不用怕
产生冲突后update会有红色警告,并且会生成一个.mine文件
使用”他们的”文本块解决冲突 ->使用对方的文本进行恢复
使用“我”解决有冲突的文件 ->使用我的文本进行恢复
编辑冲突 ->手动编辑代码合并
六、分支
什么时候需要开分支?
隔离线上版本和开发版本
大功能开发,不想影响到其他人,自己独立开个分支去开发
SVN经典目录结构:
trunk(主干)
branches(分支)
tags(标记)
注意SVN分支是服务器和本地同时的分支
- 开分支
在主干目录打开 branch/tag
选择服务器保存路径 to path (/trunk/+ “ branches/onlinev1.0”)
Create copy in the repository from 从此复制到版本库 -> HEAD revision in the repository 版本库中最新版本
- 更新分支
打开branches文件夹 update分支版本
可以把分支单独checkout出来一份
- 合并分支
打开branches文件夹 -> show log -> Merge revision to…..(合并版本到) -> 选择trunk
打开trunk 文件夹 可以看到已经合并成功了
commit 可以看到类似 【合并了修改版本号24从Franches/onlinev1.0:修复图片名字错误】 的log
最后commit trunk 的代码
- 切换分支
Switch….
七、代码暂存 Shelve
- 情况
代码改了很多,突然需要紧急修复一个bua,但是代码还没写完,不能提交
代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交
步骤 | 1 | 2 | 3 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
操作步骤 | Shelve | Path+Name+log | Cheakpoint按钮 | Shelve按钮 | UnShelve | Name Version |
说明 | 暂存 | 选中暂存文件并写暂存名字和log 如果版本名字之前有了那么会把版本号迭代更新 |
暂存,本地修改保留 | 暂存,本地修改打回 | 取出暂存 | 寻找暂存的名字和版本号 |
八、复杂代码合并
- 情况
主干开发新功能 改了
分支是线上版本,修复了很多bug
两个分支的代码时间久了差异很大,无法直接分支合并或者指定提交记录合并代码
BeyondCompare
使用 BeyondCompare合并
拉入俩个文件夹
一个本地 一个服务器 (本人习惯本地在左边 服务器在右边)
使用rules-> Comparison -> Compare contents 比较文件夹
文件夹会有三种颜色
灰:表示俩个文件一样
紫:文件是新增文件
红:文件比对有修改(不一样)
对于三种不同文件采用解决方法
可以在文件夹或者文件内部
使用右键
Move To Right (Ctrl + R) 来处理冲突
或者文件夹内手动修改冲突
九、Git和SVN区别
Git与SVN对比
Git
与SVN
都是版本控制系统,版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一,最主要的功能就是追踪文件的变更。
描述
SVN
是集中式管理的版本控制器,而Git
是分布式管理的版本控制器,这是两者之间最核心的区别。SVN
只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。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 都得备份。 |
较高,每个开发者的本地就是一套完整版本库,记录着版本库的所有信息。 |
分支方面 | 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 等。 |