标签 svn 下的文章

SVN 使用入门

svn 是一个文件版本控制管理系统,可用于团队代码管理、文档共享。

1.svn 地址与账号

一般会提供两种协议的使用方式:svn, http。比如 svn 管理员提供的使用地址是

http://192.168.1.1/svn/repo1/
svn://192.168.1.1/repo1

同时管理员会为你创建账号和密码。两种协议使用两套账号,如果管理员设置为相同,则使用时就像一套账号。一般 http 协议使用公共的账号即可,只可浏览文件。svn 协议则使用管理员分配的账号。

http 方式,只要在浏览器上打开上面的 http 地址,输入账号、密码,即可访问。

2. 客户端使用

2.1 Windows

使用 TortoiseSVN,这是目前使用最广泛的 svn 客户端。到官网下载、安装。

检出仓库

右键点击 SVN 检出(SVN Checkout...),打开如下界面,输入 svn 协议地址

svn_checkout.png

点击确定,会弹出账号密码输入界面,正确输入后即可。顺利的话,会在当前目录创建 repo1 文件夹,并且下载这个仓库中全部的文件。

提交文件

如果修改了文件,或者增加、删除了文件,可以将它提交到服务器,这样别人就能看到你的改动。

右键点击 SVN 提交(SVN Commit...),打开如下界面,勾选要提交的改动,填写修改备注(非必填),提交即可。

svn_commit.png

注意:如果无法提交文件(例如报错Can't open file '/home/svn/repo1/db/txn-current-lock': Permission denied),请确保上一步检出的地址,是 svn 协议地址,并且(与管理员确认)账号拥有写权限。http 协议的地址,只能查看。

撤销本地修改

如果修改了文件,还未提交,想撤销。

右键 -> TortoiseSVN -> 回滚(Revert...),可以回退到上一个版本。

Docker 搭建 svn 服务器

svn 是一种集中式版本管理系统。最新文件存储在服务器上,用户需要先从服务器下载(检出)最新文件,修改后再提交到服务器。版本信息也是放在服务器上,如果连接不上服务器,则无法提交、还原、对比等操作。

优点是符合一般的思维逻辑,适合做团队内部文档共享、管理系统。

1.下载镜像与运行容器

docker run --name svn \
    --detach \
    --volume /root/container/svn:/var/opt/svn \
    --publish 3690:3690 \
    garethflowers/svn-server

以上命令运行的镜像是 garethflowers/svn-server,如果本地没有则会下载。

2.创建新的仓库

docker exec -it svn svnadmin create repo1

创建一个名为 repo1 的仓库。查看其对应的文件目录,包含如下文件:

ls /root/container/svn/repo1
conf  db  format  hooks  locks  README.txt

3.修改配置文件

仓库路径下 conf 为配置文件目录,有以下文件:

ls ./repo1/conf
authz  hooks-env.tmpl  passwd  svnserve.conf

修改 svnserve.conf

[general]
anon-access = none             # 匿名用户不可读写,也可设置为只读 read
auth-access = write            # 授权用户可写
password-db = passwd           # 密码文件路径,相对于当前目录
authz-db = authz               # 访问控制文件
realm = /var/opt/svn/repo1     # 认证命名空间,会在认证提示界面显示,并作为凭证缓存的关键字,可以写仓库名称

配置账号与密码,修改 passwd,格式为“账号 = 密码”

[users]
# harry = harryssecret
# sally = sallyssecret
eric = 123456

配置权限,修改 authz


[groups]
owner = eric, user1

[/]             # / 表示所有仓库
eric = rw       # 用户 eric 在所有仓库拥有读写权限

[repo1:/]           # 表示以下用户在仓库 repo1 的所有目录有相应权限
user1 = rw
@owner = rw         # 表示 owner 组下的用户拥有读写权限

说明,r 表示读,w 表示写。没有设置的用户默认为无权限。
注意:更改svnserve.conf,authz和passwd文件时不需要重启。


附加内容

上面的 svn 服务器不支持 http 协议访问,如果要支持,可以在上面的容器中安装 Apache 服务器及相应的模块(mod_dav_svn),配置好即可。并将其提交、生成一个新的镜像保存下来。

当然也可以使用 Docker Hub 上已经支持 http 协议访问的镜像。

准备工作:

# 生成一个空的密码文件,用于 Apache 的 HTTP 认证
mkdir -p /root/container/svn/apache
touch /root/container/svn/apache/passwd

运行容器:

docker run -d \
    --name svn-server \
    -p 21080:80 \
    -p 3690:3960 \
    --volume /root/container/svn/repo:/home/svn \
    --volume /root/container/svn/apache/passwd:/etc/subversion/passwd \
    elleflorio/svn-server

创建 http 访问账号

docker exec -t svn-server htpasswd -b /etc/subversion/passwd <username> <password>

此账号和密码被写入容器中的 HTTP 认证文件(/etc/subversion/passwd),且密码是加密的。实践经验表明,既然用 http 协议访问只能查看,那么创建一个公共的账号,供大家使用即可。也可创建与 svn 认证文件中一样的账号和密码。

创建新的仓库

docker exec -it svn-server svnadmin create repo1

svn 客户端的账号权限则在 repo1/conf 的配置文件中配置。见本文前一部分配置说明。


备份数据

svn 存储数据有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。
仓库文件(数据)存储路径为 ./repo1/db/revs,注意保护好。一般直接备份整个仓库 ./repo1/。