在 Window 系统中想用 SVN 服务器,只需要安装 VisualSVN-Server 即可,这是带有图形操作界面的,那么创建仓库,新建用户,修改密码,修改权限等操作很简单,动动鼠标就可以了。

那么在 Linux 系统中,如何进行这些操作呢?这里假设已经安装好了 SVN 服务器,具体安装过程这里就不再写了。

查看 svn 版本:

​svn --version(包含版本信息、编译信息、版权信息等)​

​svn --version --quiet(只查看版本号)​

1)在 svn 根目录下建立版本仓库

​svnadmin create product3dl​

如果找不到刚创建的仓库,可以用 find 命令来查找:

​find -name product3dl​

其中,product3dl 就是仓库名,仓库建立好以后会出现一个仓库名的文件夹,文件夹下面有 conf 等几个目录和文件。

查看仓库下的所有目录及文件:

​cd product3dl/​

​ll -a​


结果:
total 32
drwxrwxr-x. 6 svn svn 4096 Dec 15 09:44 .
drwx——. 26 svn svn 4096 Dec 15 09:44 ..
drwxrwxr-x. 2 svn svn 4096 Dec 15 09:44 conf
drwxrwsr-x. 6 svn svn 4096 Dec 15 09:44 db
-r–r–r–. 1 svn svn 2 Dec 15 09:44 format
drwxrwxr-x. 2 svn svn 4096 Dec 15 09:44 hooks
drwxrwxr-x. 2 svn svn 4096 Dec 15 09:44 locks
-rw-rw-r–. 1 svn svn 229 Dec 15 09:44 README.txt


2)新建用户

修改 conf 文件夹下的 authz 文件:

​vi authz​

修改后如下:


​#​​ harryharry_and_sally = harry,sally
​#​​ harryharry_sally_and_joe = harry,sally,&joe
study = mll,cz,ldp,ly
admin = qzg,mll
[/home/svn/product3dl]
@admin = rw
@study = rw
* =
​#​​ [/foo/bar]
​#​​ harry = rw
​#​​ &joe = r
​#​​ * =
​#​​ [repository:/baz/fuz]
​#​​ @harry_and_sally = rw


此配置文件采用“基于路径的授权”策略,中括号里指定路径,以下列出对各用户的授权。

包括只读 r,读写 rw。没有列出的用户,则不允许访问。还可以对用户分组,其中,1 个用户组可以包含 1 个或多个用户,用户间以逗号分隔。

/ 表示根目录(仓储目录)及以下,根目录是 svnserve 启动时指定的,我们指定 /opt/svndata。这样,/ 就是表示对全部版本库设置权限。

权限主体可以是用户组、用户或 ​,用户组在前面加@,​ 表示全部用户。权限可以是 w、r、wr 和空,空表示没有任何权限。

在 [groups] 下增加你的用户组(记得等号前后留空格)。

3)修改用户密码

添加了用户以后就需要给用户设置密码了,打开conf/passwd文件:

​vi passwd​

取消 [users] 的注释,并在下面加上你的用户的密码设置(记得等号左右的空格),如下:


​#​​ harry = harryssecret
​#​​ sally = sallyssecret
qzgqzg = qzg
mllmll = mll
czcz = cz
ldpldp = ldp
lyly = ly


4)启动 svn 对用户权限、密码的控制

需要启动SVN对用户权限、密码的控制,不然的话你就只能读而不能写了。

修改svnserve.conf文件:

​vi svnserve.conf​

各参数功能在配置文件的注释中有说明, 此处配置如下(取消下面几条前面的 # 号注释就 OK 了):


anon-access = read
auth-access = write
password-db = passwd
authzauthz-db = authz


5)给仓库分配写权限

需要给仓库提供读写权限,不然不能提交文件:

​chmod 777 -R product3dl/​

6)重新启动 svn 服务

启动 svn 服务命令:

​svnserve -d -r /svn​

如果报错如下:


svnserve: Can’t bind server socket: Address already in use


解决办法:


使用“ ps -e|grep svnserve ”找到服务对应进程编号,使用 kill 命令后,再使用启动命令重启服务。


Good Luck!