SVN简明教程

高风亮节 2022年10月11日 1,645次浏览

1、安装

yum -y install subversion
svn --version //查看版本

2、创建svn版本库

mkdir /home/svn
创建svn项目
svnadmin create /home/svn/mytestsvn

3、修改配置文件

cd /home/svn/mytestsvn/conf
里面有三个配置文件:authz/passwd/svnserve.conf

3.1、authz

[groups]
ana=user01,ueser02
dig=user11,user12

[/]
@dig=rw

[/trunk/analog]
@ana=rw
[/trunk/common]
@ana=r
[groups]配置段中配置行格式如下:
<用户组> = <用户列表>
版本库路径权限段的段名格式如下:
[<版本库名>:<路径>]

3.2、passwd

[users]
user01 = abc123
uuser02 = abc123
user03 = abc123
user04 = abc123
格式:<用户名> = <口令>

3.3、svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /home/svn/mytestsvn
• anon-access: 控制非鉴权用户访问版本库的权限,取值范围为 “write”、“read” 和 “none”。 即 “write” 为可读可写,“read” 为只读,“none” 表示无访问权限,默认值:read。
• auth-access: 控制鉴权用户访问版本库的权限。取值范围为 “write”、“read” 和 “none”。 即"write"为可读可写,"read"为只读,"none"表示无访问权限,默认值:write。
• authz-db: 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径,默认值:authz。
• realm: 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。默认值:一个UUID(Universal Unique IDentifier,全局唯一标示)。

4、启动svn server

svnserve -d -r 目录 --listen-port 端口号
-r: 配置方式决定了版本库访问方式。
–listen-port: 指定SVN监听端口,不加此参数,SVN默认监听3690
svnserver -d -r /home/svn/mytestsvn //单项目模式,可以用svn://192.168.3.93/访问版本库
svnserver -d -r /home/svn //多项目模式,可以用svn://192.168.3.93/mytesysvn访问版本库

5、检出操作

svn checkout svn://192.168.3.93/mytestsvn --username=user01
ll mytestsvn

6、解决冲突

比如提交special.notes文件
svn diff
svn commit -m “change special.note first”
如果其他人改过,提交失败,建议使用:
svn update
系统提示当前版本是6
svn update -r6
svn commit -m “change special.notes second”

7、提交操作

cd /home/svn/mytestsvn/trunk
cat readme
This is a SVN tutorial file.
svn status
? readme
此时 readme的状态为?,说明它还未加到版本控制中。
将文件readme加到版本控制,等待提交到版本库。
svn add readme
A readme
查看工作副本中的状态
svn status
A readme
此时 readme的状态为A,它意味着这个文件已经被成功地添加到了版本控制中。
为了把 readme 存储到版本库中,使用 commit -m 加上注释信息来提交。
如果你忽略了 -m 选项, SVN会打开一个可以输入多行的文本编辑器来让你输入提交信息。
svn commit -m “SVN readme.”
Adding readme
Transmitting file data .
Committed revision 1.
svn commit -m “SVN readme.”
现在 readme 被成功地添加到了版本库中,并且修订版本号自动增加了1。

8、版本回退

svn status
M readme
这时我们发现修改错误,要撤销修改,通过 svn revert 文件 readme 回归到未修改状态。
svn revert readme
Reverted ‘readme’
再查看状态。
svn status
进行 revert 操作之后,readme 文件恢复了原始的状态。 revert 操作不单单可以使单个文件恢复原状, 而且可以使整个目录恢复原状。恢复目录用 -R 命令,如下。
svn revert -R trunk
但是,假如我们想恢复一个已经提交的版本怎么办。
为了消除一个旧版本,我们必须撤销旧版本里的所有更改然后提交一个新版本。这种操作叫做 reverse merge。
首先,找到仓库的当前版本,现在是版本 22,我们要撤销回之前的版本,比如版本 21。
svn merge -r 22:21 readme

9、查看历史信息

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

9.1、 svn log

svn log -r 6:8 //查看特定的某两个版本之间的信息
svn log trunk/readme //查看某一个版本的信息
如果希望得到目录的信息要加 -v。
如果希望显示限定N条记录的目录信息,使用 svn log -l N -v。
svn log -l 5 -v

9.2、svn diff

检查本地修改
比较工作拷贝与版本库
比较版本库与版本库
(1)、不带任何参数,它将会比较你的工作文件与缓存在 .svn 的"原始"拷贝。
svn diff
(2)、比较工作拷贝和版本库
比较你的工作拷贝和版本库中版本号为 3 的文件 rule.txt。
svn diff -r 3 rule.txt
(3)、比较版本库与版本库
通过 -r(revision) 传递两个通过冒号分开的版本号,这两个版本会进行比较。
比较 svn 工作版本中版本号2和3的这个文件的变化。
svn diff -r 2:3 rule.txt

9.3、svn cat

如果只是希望检查一个过去版本,不希望查看他们的区别,可使用svn cat
svn cat -r 版本号 rule.txt
这个命令会显示在该版本号下的该文件内容

9.4、svn list

svn list 可以在不下载文件到本地目录的情况下来察看目录中的文件:
svn list http://192.168.3.93/mytestsvn //显示server的目录文件
README
branches/
clients/
tags/

10、svn分支branch

cd /home/mytestsvn //进入目录
ls //显示文件
branches tags trunk
svn copy trunk/ branches/my_branch //copy分支
A branches/my_branch
svn status //查看状态
A + branches/my_branch
A + branches/my_branch/readme2
A + branches/my_branch/readme

svn commit -m “add my_branch” //提交新增的分支到版本库
Adding branches/my_branch
Replacing branches/my_branch/readme2
Adding branches/my_branch/readme
Committed revision 9.
接着我们就到 进行开发,切换到分支路径并创建readme2 文件。
cd branches/my_branch/ //进入my_branch 分支
ls //显示文件
readme readme2
svn status //查看状态
? readme
svn add readme //将readme加入版本控制
A readme
svn commit -m “add readme” //提交到版本库中
Adding readme
Transmitting file data .
Committed revision 10.
svn merge …/branches/my_branch/ //切换到 trunk,执行 svn update,然后将 my_branch 分支合并到 trunk 中
— Merging r10 into ‘.’:
A readme
— Recording mergeinfo for merge of r10 into ‘.’:
G .
此时查看目录,可以看到 trunk 中已经多了 my_branch 分支创建的 readme 文件。
svn commit -m “add readme” //将合并好的 trunk 提交到版本库中
Adding readme
Transmitting file data .
Committed revision 11.

11、svn标签tag

svn copy trunk/ tags/v1.0 //创建标签
A tags/v1.0
上面的代码成功完成,新的目录将会被创建在 tags 目录下。
ls tags/ //查看tags内容
v1.0
ls tags/v1.0/ //查看tags/v1.0/内容
readme2 readme
svn status //查看状态
A + tags/v1.0
svn commit -m “tags v1.0” //提交tag内容
Adding tags/v1.0
Transmitting file data …
Committed revision 14.