SVN详解

svn是什么

subvert(颠覆) + verson(版本) = subversion -> svn

1.代码版本管理工具
2.他能记住每次的修改
3.查看所有的修改记录
4.恢复到任何历史版本
5.恢复已经删除的文件

svn和git比较的优势

使用简单,上手快
目录级权限控制,企业安全必备(git没有目录级权限)
子目录checkout,减少不必要的文件检出

主要应用

开发人员用来做代码的版本管理
用来存储一些重要的文件,如合同
公司内部文件共享,并且能按目录划分权限

svn仓库

推荐:svnbucket.com ---> svn桶
现在最好用的svn服务

安装svn客户端

Tortoisesvn
Cornstone

什么情况容易发生冲突

多个人修改了同一个文件的同一行
无法进行合并的二进制文件

怎么避免冲突

经常update同步别人的代码
二进制文件不要多个人同时操作

什么时候需要开分支

隔离线上版本和开发版本
大功能开发,不想影响其他人,自己独立创建分支去开发

svn经典目录结构

trunk --- 主干
branches --- 分支
tags --- 标记(记录重要事件,阶段性成果)

在这里插入图片描述在这里插入图片描述

svn部署及网络结构

在这里插入图片描述

命名规则

在这里插入图片描述
Release 是指 tags 和 binexport 两处发布目录的命令规则
在这里插入图片描述

发版流程

对外发布参考文档《图像处理团队发布版本流程》,对内发布流程为:

(1) 从 trunk 或者其他分支创建发布分支 branches/RB-xxx;
(2) 在对应操作系统 co 后编译测试,如有修改,在 RB 分支中提交;
(3) 测试无误后,在 RB 分支中提交 distribution 中所有内容(注意 lib 文件夹下的二进制库需要手动 add 添加,使用 st 命令查看时,无法显示二进制库);
(4) 从 RB-xxx/src/distribution 目录中创建 Release 发布二进制库 binexport;
(5) 删除 RB-xxx/src/distribution 目录中提交的内容,创建 tags;
(6) 如有必要,将 RB 中的修改 merge 到对应的 trunk 中。

在这里插入图片描述

svn常用命令

checkout — 将svn仓库中的文件检出到工作副本(本地)
svn checkout 文件的服务端路径
如:svn checkout svn://192.168.30.219/testSVN
	svn co svn://192.168.30.219/testSVN
add — 添加工作副本中的文件到svn仓库中
svn add 文件的工作副本路径
如:svn add test.txt
delete — 删除仓库中的文件
svn delete 文件的工作副本路径
如:svn delete svn://192.168.30.219/testSVN/test.txt
	svn del svn://192.168.30.219/testSVN/test.txt
commit — 提交修改过的工作副本到仓库
svn commit 文件的工作副本路径 -m 日志内容
如:svn commit test.txt -m "add test.txt"
	svn commit -m "add test.txt" test.txt
	svn ci -m "add test.txt" test.txt
log — 查看文件或目录的日志
svn log 文件的工作副本或svn仓库路径
如:svn log svn://192.168.30.219/testSVN/test.txt
	svn log test.txt
status — 查看工作副本中文件的状态
如:svn status
	svn st
merge — 合并文件
svn merge 初始版本  最终版本  目标工作副本
propdel/propedit/propget — 修改svn属性
svn propdel/propedit/propget svn:属性名 文件路径
resolved — 解决冲突、不同操作系统规定不同
svn resolved 文件路径

基本操作注意事项

1、更新、提交
(1)提交操作
	a、每次提交之前,先更新svn上最新的记录
	b、再st查看文件状态(不是此次需要提交修改的文件)
	c、如果需要,使用diff命令查看背地文件和svn记录的差异,决定是否需要提交
	d、文件状态都符合后,再提交
(2)日志规范
	每次提交必须写明日志,日志中记录此次提交的内容,日志要达到协作开发中,本人/他人可以通过查看日志知道提交的目的。
如:
	根据xx需求,增加xx功能,实现xx
	修改xx的bug
	优化xx功能,修改xx函数实现
	从trunk创建版本branches/RBxxx,用来发布xxx
	创建xxx的tags/binexport
(3)提交完整
	每次提交后,使用st查看所有文件状态,查看是否有漏提交的文件(特别注意新增文件,漏添加的情况),要保证能够从某个地方检出所有的源码
2、查看历史日志
查看 trunk 所有日志:
$ svn log svn://192.168.30.219/testSVN/trunk
查看 RB-1.0.0-UBT-16.04 从版本号 328 到最新的日志:
$ svn log svn://192.168.30.219/testSVN/branches/RB-1.0.0-UBT-16.04 –r328:HEAD
查看从版本号 328 到版本号 400 的所有日志:
$ svn log svn://192.168.30.219/testSVN/ –r328:400
3、从某个版本创建新的版本
在发版时,或者创建分支进行实验代码时,需要从某个版本,创建新的版本,
需要使用拷贝 copy 命令。常用命令示例:
从 trunk 创建 RB-1.0.0-UBT 发布分支:
$ svn cp svn://192.168.30.219/testSVN/trunk
svn://192.168.30.219/testSVN/branches/RB-1.0.0-UBT-16.04 –m”从 trunk 创建发布分支 branches/RB-1.0.0-UBT-16.04,
用来实现 svn 学习操作测试。”
从 trunk 的版本号 r400 创建实验分支:
$ svn cp svn://192.168.30.219/testSVN/trunk –r400
svn://192.168.30.219/testSVN/branches/TRY-ME-1-UBT-16.04 –m”从 trunk 的 r400 版本创建实验分支 branches/ TRY-ME-1-UBT-16.04,
用来实验学习 svn 命令。”
4、合并版本merge
合并操作主要用于在某个分支修改的代码和另外一个分支/trunk 需要合并时,使用到 merge 操作(如果修改量较小时,建议使用 merge 命令操作;
如果修改量较大时,建议使用查看差异工具,仔细比对代码后,手动合并,防止出现冲突)。示例如下:
将实验分支 TRY-ME-1-UBT-16.04 中 src 的代码合并到 trunk 中:
(1) 首先进入 trunk/src 目录,并进行 up 更新本地代码操作;
(2) 然后执行命令
$ svn merge svn://192.168.30.219/testSVN/branches/TRY-ME-1-UBT-16.04/src
(3) 系统会自动自动合并代码,如果两者有冲突,则会提醒冲突,然后按照冲突问题进行解决;
(4) 再在 trunk/src 中使用 st 命令查看状态,检查无误后,进行提交。
5、代码存放原则
源码部分不能提交编译结果和测试目录(例如:*.so,*.o,*.dll,以及大量测试图片样本等),
除了 binexport 中,原则上其他目录中不能存放二进制内容(特殊情况例外)。
6、协作开发管理
1、 防止冲突
多人协作开发时,可能会出现本人和他人修改地方冲突的情况,为了防止冲突有以下建议:
(1) 协作修改前,和他人沟通确认,两人错开修改;
(2) 修改前,从待修改分支创建实验分支,修改完毕后再合并;
(3) 提交时,如出现冲突,使用 resolved 命令解决冲突。
2、 冲突的解决(resolved)
当修改后,提交时,提示有冲突,可以根据冲突后系统提示的命令,进行解决冲突。
特别需要注意使用“使用他人版本”选项时,注意自己本地代码是否需要备份,防止自己代码丢失。
一般出现这种情况,建议选择“退出”选项,手动合并代码,解决冲突。
7、vendor 和 vendorsrc 的使用
当项目需要依赖外部的发布库,或者源码时,需要使用 vendor 和 vendorsrc 设置外部依赖,使用时有以下原则:
(1)项目之间共享的组件/功能应单独作为项目,在 svn 上存放,并将 svn 存放地址设置为本项目的外部依赖,包含到本项目中进行使用;
(2)使用的第三方库/源码也需要进行 svn 管理(对于这种情况,必要时申请\新的 svn 工程存放第三方资源);
(3)vendor 和 vendorsrc 中内容一定是通过设置后,svn 更新下来的内容,不可以在 vendor 和 vendorsrc 目录中手动 add 添加和提交 ci 任何东西!
(4)设置 vendor 和 vendorsrc 命令示例如下:
a、 如果修改 trunk 中的 vendor/vendorsrc,进入 trunk 目录;
b、 执行修改 vendor/vendorsrc 命令
本地修改命令:
$ svn propeidt svn:externals vendor
远程修改命令:
$ svn propeidt svn:externals
svn://192.168.30.219/testSVN/branches/RB-1.0.0-UBT-16.04/vendor
需要注明编辑器名称的命令:
$ svn propeidt svn:externals vendor –editor-cmd vim
(注意:修改 vendosrc 命令和 vendor 相同,将上述命令中的 vendor修改为 vendorsrc 即可。)
c、 设置的内容,一般是指明依赖的二进制库的发布包/源码 svn 地址,如此处依赖 TC_PhotoIO.1.8.0-UBT-16.04 版本,则设置内容如下:
TC_PhotoIO svn://192.168.30.219/TC_PhotoIO/binexport/REL-1.8.0-UBT-16.04
d、 修改后,则设置成功,执行 up 命令,即把对应的二进制库/源码下载到本地的 vendor/vendorsrc 目录下;
e、 编译测试无误后,注意使用 ci 命名提交 vendor/vendorsrc 的修改。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4.1 SVN的特点 SVN(Subversion)是一个集中式版本控制系统,其特点包括: - 集中式控制:SVN使用集中式控制,即所有的代码都存储在中央服务器上,开发者通过客户端从中央服务器上获取代码进行开发。 - 可靠性:SVN提供了完善的错误处理和恢复机制,可以保证代码在传输、存储和管理过程中的可靠性。 - 简单易用:SVN的命令行和图形化界面都比较简单易用,容易上手。 - 多平台支持:SVN可以在Windows、Linux、Mac等多个平台上运行,且可以与其他版本控制系统兼容。 - 安全性:SVN提供了多种身份验证方式,可以确保代码的安全性。 4.2 SVN的基本操作 SVN的基本操作包括: - Checkout:从中央服务器上获取代码到本地电脑。 - Commit:将本地代码提交到中央服务器。 - Update:从中央服务器上获取其他人提交的代码更新到本地电脑。 - Revert:撤销本地的修改,恢复到之前的状态。 - Diff:对比本地代码和中央服务器上的代码差异。 - Merge:合并其他人提交的代码到本地电脑。 - Log:查看提交历史记录和日志信息。 4.3 SVN的分支管理 SVN支持分支管理,可以方便地进行代码的并行开发和维护。常见的分支管理方式包括: - 主干(trunk):主要用于稳定版本的开发和发布。 - 分支(branch):用于并行开发新功能或解决问题,可以随时将分支代码合并到主干上。 - 标签(tag):用于标记发布版本,一般不对标签代码进行修改。 4.4 SVN的协同工作 SVN的协同工作需要遵循以下原则: - 避免在同一个文件的同一行进行修改,避免代码冲突。 - 经常进行代码提交,避免代码丢失。 - 在进行代码提交前,先进行代码的更新与合并,避免代码冲突。 - 在进行代码合并时,仅将必要的修改合并到本地代码中,避免不必要的代码冲突。 - 对于大规模的代码修改,可以先在分支上进行测试和验证,确保代码的稳定性再合并到主干上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值