SVN服务器搭建与使用

SVN(subversion)是一个开放源代码的版本控制系统

服务器端

1 安装 svn

1
$ sudo apt-get install subversion

2 创建仓库

在指定的文件夹下创建新的仓库(repository)。 如在 /data/svn 文件夹下创建名为 repo 的仓库:

1
2
3
$ cd /data/svn
$ mkdir repo
$ svnadmin create /data/svn/repo

创建完成后,在 /data/svn/repo 文件夹中会有相关文件:

1
2
3
4
5
6
7
8
9
10
$ ll ./repo
total 32
drwxrwxr-x 6 ** ** 4096 4月 26 09:50 ./
drwxr-xr-x 5 ** ** 4096 4月 26 09:50 ../
drwxrwxr-x 2 ** ** 4096 4月 26 09:50 conf/
drwxrwsr-x 6 ** ** 4096 4月 26 09:50 db/
-r--r--r-- 1 ** ** 2 4月 26 09:50 format
drwxrwxr-x 2 ** ** 4096 4月 26 09:50 hooks/
drwxrwxr-x 2 ** ** 4096 4月 26 09:50 locks/
-rw-rw-r-- 1 ** ** 246 4月 26 09:50 README.txt

3 修改配置

在生成的文件中,conf 文件夹是用来存放配置文件的,其中 passwd 是账号密码文件,authz 是权限控制文件,svnserve.conf是svn服务配置文件。

3.1 配置 passwd

添加新用户与密码。如 leo = 123789,创建了用户 leo,密码为 123789

1
2
3
4
5
[users]
# harry = harryssecret
# sally = sallyssecret

leo = 123789

3.2 配置 authz

为新加的用户添加文件读写权限,r 表示读权限,w 表示写权限,rw表示读写权限,此处添加的读写权限包括仓库 /data/svn/repo/ 中的所有文件,。如 leo = rw 表示为用户 leo 添加读写权限,* = 表示其他用户无任何权限,注意前置符 [/] 不可省略。

1
2
3
[/]
leo = rw
* =

如果需要对用户进行分组批量管理权限,可以使用 [groups] 标签。如下配置中创建了 groups1groups2分组,并为两个分组设置不同的权限,注意组内的多个用户使用 , 隔开。

1
2
3
4
5
6
7
[groups]
groups1 = leo, john
groups2 = lily
[/]
@groups1 = rw
@groups2 = r
* =

3.3 配置 svnserve.conf

打开以下4个注释,注意打开注释时前面不要留有空格,否则访问库会报错。注意 anon-access 需改为 none, 否则 svn log 无法使用,why ?!

1
2
3
4
anon-access = none   # 匿名用户无权限
auth-access = write # 授权用户可写
password-db = passwd # 指定账号文件
authz-db = authz # 指定权限文件

4 启动服务

配置完成后,可启动服务器:

1
$ svnserve -d -r /data/svn/

其中 -d 表示已守护模式启动,-r 表示指定svn版本库的根目录,便于客户端不用输入全路径就可以访问版本库。服务器默认使用 3690 端口号,若要使用非默认端口,可在启动命令后加 --listen-port ××××, 如:

1
$ svnserve -d -r /data/svn/ --listen-port 3691

启动后,可检查是否启动成功:

1
2
3
$ ps aux | grep svnserve
senseti+ 12899 0.0 0.0 80556 948 ? Ss 10:54 0:00 svnserve -d -r /data/svn
senseti+ 12903 0.0 0.0 21292 984 pts/2 S+ 10:55 0:00 grep --color=auto svnserve

5 关闭服务

1
$ killall svnserve

客户端

1 安装 svn

1
$ sudo apt-get install subversion

2 提取操作

在服务器启动服务后,可在客户端提取版本库文件:

1
$ svn checkout svn://服务器ip/仓库名

在执行提取命令后,将提示输入用户名和密码信息,提取的仓库文件保存在当前文件目录下。

3 提交操作

在提取版本库中增添或修改新的文件后,可提交至服务器版本库中:

1
2
$ svn add 新增文件
$ svn commit -m "提交信息"

其中 commit 命令后可跟文件名,仅提交指定的文件。

4 提示!!

对于新建的仓库,为了规范仓库管理,建立checkout到本地副本后,在仓库中创建 trunk, branchestags三个文件夹,其中 trunk 存放主分支,branches 存放开发分支,tags 存放标签。


更多常用命令

1 帮助

1
2
$ svn help   # 查看svn所有子命令(subcommands)
$ svn help <subcommands> # 查看某个子命令的使用方法

2 添加文件到版本控制

1
2
3
4
5
6
$ svn add 文件名   # 添加一个文件
$ svn add 文件夹名 # 添加一个文件夹中所有未添加的文件
$ svn add 文件夹名 --non-recursive # 仅添加本文件夹,不添加文件夹中的内容
$ svn add * # 添加s所有的文件(文件夹已经添加进去的不在进行操作)
$ svn add * --force # 添加所有的文件(文件夹已经添加进去的也要再进行操作)
$ svn add . --no-ignore --force # 添加当前目录下所有未添加的文件

3 查看信息

1
2
3
4
5
6
7
8
9
$ svn status    # 查看文件修改
$ svn log -r 2:3 # 查看版本2和3之间的信息(版本作者、日期、路径等)
$ svn log 文件名 # 查看某个文件的版本修改信息
$ svn log -l N -v # 查看限定N条记录的目录信息
$ svn diff # 比较工作文件与缓存在.svn的原始拷贝
$ svn diff -r 3 文件名 # 比较工作拷贝和版本库中版本号为3的文件
$ svn diff -r 2:3 文件名 # 比较版本2和3的文件
$ svn cat -r 版本号 文件名 # 查看该版本号下该文件的内容
$ svn list svn://服务器ip/版本库名 # 在不下载文件到本地目录的情况下查看目录中的文件

4 分支使用

将trunk主分支内容copy至新建分支my_branch

1
$ svn copy trunk/ branches/my_branch

切换到新建分支进行开发,开发完成后提交:

1
$ svn commit -m "update my_branch"

切换至trunck分支,进行分支合并:

1
2
$ svn update
$ svn merge ../branches/my_branch

把合并好后的trunk提交到版本库中:

1
$ svn commmit -m "update trunk"

5 标签使用

在本地工作副本中创建一个tag

1
$ svn copy trunk/ tags/v1.0

提交tag内容

1
$ svn commit -m "tag v1.0"

参考资料

https://www.runoob.com/svn/svn-tutorial.html

  • 版权声明: 本博客所有文章均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020-2021 Hang Liu
  • Powered by Hexo Theme Ayer
  • PV: UV: