svn使用教程

概念

repository:存放源码的仓库
checkout:将仓库中的源码checkout到本地一份
commit:将更改后的代码commit到仓库中
update:将本地代码与仓库中的代码同步
程序员如果对同一个文件的同一行代码进行修改,则会有 conflict冲突,需要手动修改

功能

  1. 目录版本控制
  2. 真实的版本历史
  3. 自动提交
  4. 纳入版本控管的元数据
  5. 选择不同网络层
  6. 一致的数据处理方式
  7. 有效的分支与标签

svn生命周期

创建版本库

版本库相当于一个集中的空间,用来存放程序员的所有工作成果,一般会包括开发的代码以及修改历史,使用create进行版本库的创建,只能创建一次,在创建时,会要求提供该仓库的标识信息

检出

通过checkout将仓库中的代码push到本地,相当于建立了一个工作的副本,修改完成后,需要提交到仓库中

更新

通过update来更新代码,这个操作会实现副本与仓库的代码同步。比如在公司中有员工A和B开发代码,A和B同时从仓库中checkout最新版本的代码进行工作,而A工作效率高,完成了相应功能的开发,并将自己开发的代码commit到了仓库中,这是B的副本就过期了,此时B应该更新最新的副本,从仓库中拉取A开发的最新改动的并将B的代码进行更新

变更

变更操作是改变了工作的副本,将这些变更后内容添加到了变更列表中,对仓库中的代码没有影响,直到commit之后才会变更仓库中的代码
比如:编辑已存的文件(添加/删除等),添加文件/目录,删除文件/目录,rename操作更改文件/目录名字

复查变化

当检出工作副本或者更新工作副本后,工作副本要比仓库中的版本要新,在commit之前需要复查下修改是一个很好的习惯
status操作会查看副本中所进行的变动。提供了一个变动的列表,不会提供变动的详细信息,可通过diff查看变动的详细信息

恢复错误

通过revert操作来重置变更的列表,可以重置一个或多个文件/目录,也可以重置整个工作副本,将待变更的列表删除,将副本恢复到原始状态

解决冲突

合并时有可能会发生冲突,merge操作会自动处理可以合并的安全的东西,比如一个文件在分支上被修改了,在另一个分之上又被删除了,这是就会产生冲突,这种情况需要认为进行处理,resolve操作可以用来帮助用户找出冲突并告诉版本库如何处理这些冲突。

提交更改

commit操作将副本中的变更列表提交到仓库中,这个操作会修改版本库中的内容,其他开发者可以通过更新到他们工作副本来查看这些修改,当提交的时候通过注释来说明为什么会进行这些改动,这些注释会成为仓库历史记录的一部分.

svn创建版本库

使用svn命令创建资源库:

>svnadmin create /opt/svn/runoob01

进入/opt/svn/runoob01/conf目录,修改默认配置文件,包括svnseerve.conf、password、authz配置相关用户和权限

1.svn服务端配置svnserve.conf

//版本库目录文件conf/svnserve.conf,该文件仅由一个【general】配置段组成
[general]
anon-access = none//控制非鉴权用户访问版本库的权限,取值有read、write、none,默认值:read
auth-access = write//控制鉴权用户访问版本库的权限,取值有write、read、none,默认值:write
password-db = /home/svn/passwd//指定用户名口令文件
authz-db = /home/svn/authz//指定权限配置文件名,如果没有指定绝对路径,则以conf目录为相对路径,除非指定绝对路径,默认值:authz
realm = tiku //版本库认证域,即登录时提示的认证域名称

2.用户名口令文件passwd

//用户名口令文件由svnserve.conf配置项password-db指定,默认是conf目录下的passwd,由[users]配置段组成
//格式:<用户名>=<口令>
[users]
admin = admin
thinker = 123456

3.权限配置文件

//权限配置文件默认是conf下的authz,权限配置文件由svnserve.conf的配置项authz-db指定,由[groups]配置段和若干版本库路径权限段组成
//配置段配置行格式:<用户组>=<用户列表>
//版本库路径权限段的段名格式:[<版本库名>:<路径>]

svn检出操作

通过url在客户端检出以url为svn://192.168.0.1/runoob01 为例

svn checkout svn://192.168.0.1/runoob01 --username=user01
结果:
A    runoob01/trunk
A    runoob01/branches
A    runoob01/tags
Checked out revision 1.	
//检出成功后在当前目录下会生成runoob01副本目录

svn解决冲突

假设user01和user02都在版本号为100的时候,更新了hello.html文件,user01先完成hello.html文件的编写并将代码提交到了仓库,此时的版本号就变成了101,user02此时也完成了hello.html文件的编写,并将hello.html文件提交到仓库,此时由于user02版本号不是在101版本上进行的修改,所以提交失败

解决方案:在提交更改的副本之前先更新工作副本,所以使用update命令

svn update
//指定跟新的版本
svn update -r版本号
//此时的副本与仓库已经同步,可以安全提交
svn commit -m '更改的列表描述'

svn提交操作

//增加一个文件readme文件
//查看工作副本的状态
svn status//此时的readme的状态为?,说明还未加到版本控制中
//将文件readme添加到版本控制
svn add readme
//查看副本中状态
svn status //A readme,readme文件成功添加到了版本控制中
//将readme存储到版本库中
commit -m ‘注释信息’ //如果忽略了-m选项,svn会打开一个文本编辑器让你输入提交信息

svn版本回退

当想要放弃文件的修改时,可以使用svn revert命令,svn revert命令将会撤销任何文件或目录的局部更改

//查看文件readme的状态
svn status readme
- M       readme
//这时发现修改错误,想要撤销修改
svn revert readme
- Reverted 'readme'
//在查看状态
svn status
//revert不仅可以使单个文件进行恢复,而且可以使整个目录恢复原状,回复目录时用-R命令
svn revert -R trunk

想要恢复一个已经提交的版本,必须要撤销旧版本里的所有更改然后提交一个新的版本,比如仓库当前版本为22,想撤回到之前的版本21

svn merge -r 22:21 readme

svn查看历史信息

svn命令可以根据时间或修订号去处旧版本或者某一版本所做的具体修改
svn log:展示svn的版本作者、日期、路径…
svn diff:用来显示特定修改的行级详细信息
svn cat:取得在特定版本的某文件显示在当前屏幕
svn list:显示一个目录或某一版本存在的文件

1.svn log

**svn log -r 6:8**//只希望查看特定的某两个版本之间的信息
------------------------------------------------------------------------
r6 | user02 | 2016-11-07 02:01:26 +0800 (Mon, 07 Nov 2016) | 1 line

change HelloWorld.html first.
------------------------------------------------------------------------
r7 | user01 | 2016-11-07 02:23:26 +0800 (Mon, 07 Nov 2016) | 1 line

change HelloWorld.html second
------------------------------------------------------------------------
r8 | user01 | 2016-11-07 02:53:13 +0800 (Mon, 07 Nov 2016) | 1 line

SVN readme.
2.只想查看某一个文件的版本修改信息
**svn log trunk/HelloWorld.html**
------------------------------------------------------------------------
r7 | user01 | 2016-11-07 02:23:26 +0800 (Mon, 07 Nov 2016) | 1 line

change HelloWorld.html second
------------------------------------------------------------------------
r6 | user02 | 2016-11-07 02:01:26 +0800 (Mon, 07 Nov 2016) | 1 line

change HelloWorld.html first.
------------------------------------------------------------------------
r5 | user01 | 2016-11-07 01:50:03 +0800 (Mon, 07 Nov 2016) | 1 line
------------------------------------------------------------------------
r4 | user01 | 2016-11-07 01:45:43 +0800 (Mon, 07 Nov 2016) | 1 line

Add function to accept input and to display array contents
------------------------------------------------------------------------
r3 | user01 | 2016-11-07 01:42:35 +0800 (Mon, 07 Nov 2016) | 1 line


------------------------------------------------------------------------
r2 | user01 | 2016-08-23 17:29:02 +0800 (Tue, 23 Aug 2016) | 1 line

first file

** 注:如果希望得到目录的信息要加-v,如果希望显示限定N条记录的目录信息,使用svn log -l N -v**

**svn log -l 5 -v**
------------------------------------------------------------------------
r6 | user02 | 2016-11-07 02:01:26 +0800 (Mon, 07 Nov 2016) | 1 line
Changed paths:
   M /trunk/HelloWorld.html

change HelloWorld.html first.
------------------------------------------------------------------------
r5 | user01 | 2016-11-07 01:50:03 +0800 (Mon, 07 Nov 2016) | 1 line
Changed paths:
   M /trunk/HelloWorld.html


------------------------------------------------------------------------
r4 | user01 | 2016-11-07 01:45:43 +0800 (Mon, 07 Nov 2016) | 1 line
Changed paths:
   M /trunk/HelloWorld.html

Add function to accept input and to display array contents
------------------------------------------------------------------------
r3 | user01 | 2016-11-07 01:42:35 +0800 (Mon, 07 Nov 2016) | 1 line
Changed paths:
   A /trunk/HelloWorld.html (from /trunk/helloworld.html:2)
   D /trunk/helloworld.html
------------------------------------------------------------------------
r2 | user01 | 2016-08-23 17:29:02 +0800 (Tue, 23 Aug 2016) | 1 line
Changed paths:
   A /trunk/helloworld.html
first file

2.svn diff

检查历史修改的详情

  • 检查本地修改
  • 比较工作拷贝与版本库
  • 比较版本库与版本库

2.1 不加参数,比较工作文件与缓存在.svn中的“原始”拷贝
root@runoob:~/svn/runoob01/trunk# svn diff
Index: rules.txt
===================================================================
— rules.txt (revision 3)
+++ rules.txt (working copy)

2.2.svn diff -r 3 rule.txt
比较工作版本与版本库中版本为3的文件rule.txt

2.3 svn diff -r 2:3 rule.txt
比较版本库与版本库,比较版本库中版本为2和版本为3的rule.txt文件的变化

2.4 svn cat -r 版本号 rule.txt
只检查过去的某个版本的文件,不会展示区别

2.5 svn list url
可以在不下载版本库中的文件的情况下,来查看目录中的文件

svn分支

branch选项,是创建出一个独立的分支,不会影响到其他的分支,比如一个主分支trunk,项目demo下有两个小组,小组1继续原来的分支开发,而用户新增的需求改动比较大,需要在trunk下新建一个分支,也就是trunk版的一个copy版,但这个新创出来的分支是独立的,不会影响到主分支和其他分支,当分支的功能开发完成后,将分支合并到主分支上,最后合并成一个项目

//创建一个myBranch分支
svn copy trunk/branches/myBranch
//查看状态
svn status
--------------------------------------
A  +    branches/my_branch
A  +    branches/my_branch/HelloWorld.html
A  +    branches/my_branch/readme
----------------------------------------
//提交新增的分支到版本库
svn commit -m 'add myBranch'
------------------------------------------
Adding         branches/my_branch
Replacing      branches/my_branch/HelloWorld.html
Adding         branches/my_branch/readme

Committed revision 9.
//到myBranch分支下进行开发
cd branches/myBranch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值