SVN入门2

SVN入门-2

一、简介

版本控制工具功能

  • 数据备份,如果本地文件丢失可以从服务仓库进行恢复
  • 权限控制,对团队中参与开发的人员进行权限控制
  • 协同修改,多人并行不悖的修改服务器端的同一个文件
  • 历史记录,查看修改人、修改时间、修改内容、日志信息,本地文件恢复到某个历史版本
  • 增量式的版本管理,服务器端保存每一个版本信息时只是保存有修改的局部内容,节约服务器资源

svn原理

SVN服务器是版本控制管理工具,其核心是集中式代码管理。开发者在开发前update代码,然后开发、解决冲突、合并、提交,所有的文件、版本信息都放在服务器的SVN仓库中 。

在这里插入图片描述

二、SVN命令大全

/* 检出 */
svn checkout svn://192.168.31.100/test	//检出代码,checkout可以缩写为co

/* 更新 */
svn update		//update可缩写为up
/* 更新某个文件 */
svn update file

/* 查看状态 */
svn status		//status可缩写st
/* 列出所有处于版本控制的文件 */
svn list svn://192.168.31.100/test
/* 显示本地或远程条目的信息 */
svn info
/* 查看文件详细信息 */
svn info file

/* 添加文件到版本 */
svn add file1 [file2 ...]
/* 提交带目录路径的文件 */
svn add app/main.c --parents
//删除文件
svn delete file

/* 提交当前目录所有改动的文件 */
svn commit -m "提交信息"	//commit可缩写为ci
/* 提交指定的文件 */
svn commit -m "提交信息" file
/* 支持提交记录信息\n换行 */
svn ci -m $'1.first line\n2.second line'

//查看差异
svn diff
//查看某个文件差异
svn diff file
//将差异保存到文件中
svn diff > test.diff

/* 还原本地文件*/
svn revert [-R] something
//恢复当前目录所有文件
svn revert -R .
//单个文件回滚
svn revert FILE
//整个目录进行递归回滚
svn revert DIR --depth=infinity

/* 版本回滚 */
svn up
//找到要回滚的版本
svn log
//查看两个提交之间的差别
svn diff -r r1:r2
//从r3回滚到版本号r2
svn merge -r r3:r2 . .

/* 锁 */
//文件上锁
svn lock file -m "加锁信息"
//删除文件锁
svn unlock file

/* 帮助 */
//全部功能选项
svn help
//具体功能说明
svn help command
2.1 冲突问题

冲突原因:

发生冲突原因就是提交的是过时的文件。两个人对项目的同一个文件,同一处地方都做了修改,但是,他提交在我之前,这样我的就会和他的发生冲突了;如果别人和自 己更改的是同一个文件,那么update时会自动进行合并,如果修改的是同一行,那么合并时会产生冲突!

svn提交发生冲突后可以输入p推迟冲突处理。

冲突的表现:

发生冲突后会产生三个文件xxx.xx.mine(发生冲突时本地文件内容)、xxx.xx.rX冲突前文件内容)、xxx.xx.rX+1(发生冲突时服务器端文件内容)

冲突解决:

将冲突文件更新后做修改再提交。或者可以提交时输入e立即编辑后提交,需要先配置svn编辑器为vim环境变量。

2.2 忽略文件

svn操作时屏蔽部分文件或目录。

  • 配置全局范围忽略文件

    打开C:\Users\HL\AppData\Roaming\Subversion\config文件中global-ignores配置项,加上要屏蔽文件的格式。

2.3 文件状态

执行svn status查看文件状态:
“?” :不在svn的控制中
“A” :新增
“C” :冲突
“D” : 删除
“G” :合并
“I” :忽略
“M” :改变
“R” :替换
“X” :未纳入版本控制,但被外部定义所用
“?” :未纳入版本控制
“!” :该项目已遗失 (被非 svn 命令所删除) 或是不完整
“~” :版本控制下的项目与其它类型的项目重名
“L” :锁定
“S” :已切换
“K” :存在锁定标记

2.4 分支

在版本控制过程中,使用多个分支同事推进多个不同功能开发。

相关目录:

  • trunk 主干
  • branches 分支
  • tags 存放项目开发过程中各个里程碑代码
//创建仓库
svnadmin create /home/waylon/workspace/repos

//修改配置
vi repos/conf/svnserve.conf
//打开以下配置
//匿名用户不可读
anon-access = none
//权限用户可写
auth-access = write
//密码文件为passwd
password-db = passwd
//权限文件为authz
authz-db = authz
//realm为svn库的名称,同一个realm名称会共享使用此SVN的用户名和密码
realm = repos

//配置账户密码
vi repos/conf/passwd
[users]
waylon = 123456

//配置权限,并赋予其读与写的权限(rw)
vi repos/conf/authz
[groups]
group1 = waylon
[/]
@group1 = rw
waylon = rw

//启动svnserve,默认端口号:3690
svnserve -d -r /home/waylon/workspace/repos

//创建目录
svn mkdir svn://192.168.31.100/repos/ -m "mkdir"
svn mkdir svn://192.168.31.100/repos/sns/ -m "mkdir"
svn mkdir svn://192.168.31.100/repos/sns/trunk -m "mkdir"
svn mkdir svn://192.168.31.100/repos/sns/branches -m "mkdir"
svn mkdir svn://192.168.31.100/repos/sns/tags -m "mkdir"

//导入项目到主分支
svn import /home/waylon/workspace/sns svn://192.168.31.100/repos/sns/trunk -m "init project"

//导出项目开发
svn co svn://192.168.31.100/repos/sns/trunk

//创建分支 svn cp 主分支 要创建的分支 -m "信息"
svn cp svn://192.168.31.100/repos/sns/trunk svn://192.168.31.100/repos/sns/branches/branch01 -m "create test branch01"

//取出分支来开发
svn co svn://192.168.31.100/repos/sns/branches/branch01

//进入分支目录,合并主干上的最新代码到分支上
svn merge svn://192.168.31.100/repos/sns/trunk

//开发完成后向主干提交,要先cd进入主干目录
//1.检查需要合并的分支的历史
svn log --stop-on-copy -q svn://192.168.31.100/repos/sns/branches/branch01
//将分支的URL的分支版本合并到主干HEAD,HEAD为当前主干上的最新版本。可以在最后加上--dry-run模拟合并看是否出错
svn merge -r 9:HEAD svn://192.168.31.100/repos/sns/branches/branch01
svn merge --reintegrate svn://192.168.31.100/repos/sns/branches/branch01
//查看状态并提交
svn st
svm ci -m "合并分支代码"

//合并完成删除分支
svn rm svn://192.168.31.100/repos/sns/branches/branch01 -m "delete branch01"

//发布
//产品开发已经基本完成,并且通过很严格的测试,这时候我们发布1.0版本
//给当前主干打个标签,并且这个标签不再改动了,但是实际上标签和分支是一个意思,你可以在标签上继续做改动,但这不推荐
svn cp svn://192.168.31.100/repos/sns/trunk svn://192.168.31.100/repos/sns/tags/release-1.0 -m "release-1.0"
//删除tags
svn rm vn://192.168.31.100/repos/sns/tags/release-1.0 -m "delete release-1.0"
2.5 补丁文件

生成patch文件:

svn diff > patchFile.patch // 整个工程的变动生成patch
svn diff file > patchFile.patch  //单独文件patch
svn diff -r old:new > patchFile.patch

打patch补丁:

//-p0代表patch目录深度
patch -p0 < patchFile.patch

三、TortoiseSVN界面操作

3.1 检出代码

在这里插入图片描述

填写仓库url,点击确认,输入用户名和密码,等待检出完成。

在这里插入图片描述

3.2 其它功能

在这里插入图片描述

3.3 切换账户密码

由于目录权限问题,如果要切换当前的账户密码,要先删除旧用户,然后使用新的用户。鼠标右键->TortoiseSVN->设置->以保存数据->认证数据【清除…】,勾选要清除的用户然后点击确定,svn操作时输入新的用户名和密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKerzIkb-1650084900337)(.\pic\image-20220415191901604.png)]

TortoiseSVN界面操作比较简单,与svn命令功能一致,更多功能可以自己尝试操作一下。

至此,SVN入门完结!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值