svn安装

Linux系统安装svn

  1. centos系统

    1
    yum install subversion
  2. buntu系统

    1
    apt install subversion
  3. 查看svn安装版本,验证是否安装成功,若显示类似“svn,版本 1.9.7 (r1800392)”表示安装成功

    1
    svnserve --version

创建仓库

创建文件夹“svn”(可以自己取名),用于保存各代码仓库,我建在“/root/svn”

1
mkdir /root/svn

创建仓库,可以在root/svn下面创建多个仓库,方便启动服务时直接启一个root/svn总服务,而不是一个个启动,方便管理(后面演示)。
这里我创建3个仓库 test1、test2、test3

1
2
3
svnadmin create /root/svn/test1
svnadmin create /root/svn/test2
svnadmin create /root/svn/test3

查看新建仓库。在仓库”./test1/conf”下有“authz””passwd””svnserve.conf” 3个配置文件分别表示:权限配置文件、用户名口令配置文件、svn服务配置文件

1
2
3
4
5
6
7
8
9
[root@localhost svn]$ cd /root/svn
[root@localhost svn]$ ls
test1 test2 test3
[root@localhost svn]$ cd test1
[root@localhost svn]$ ls
conf db format hooks locks README.txt
[root@localhost svn]$ cd conf
[root@localhost svn]$ ls
authz hooks-env.tmpl passwd svnserve.conf

配置SVN

这一步主要是配置上一步生成的“authz””passwd””svnserve.conf” 3个配置文件;
将所有的仓库都执行一遍以下3步:

  1. 配置“authz”
    [groups]下是用户分组,可以有多个组,我这里分组”admin”下有一个”robin”用户;
    ”@admin = rw”表示拥有读写权限,”* = “表示其他用户没有权限访问。

  2. 配置”passwd”
    “[users]”下对应用户名和密码,我这里用户名”robin”对应密码是”123456”,你可以自己设置

  3. 配置”svnserve.conf”
    “[general]”下有
    ”anon-access”(非鉴权用户访问库的权限)、
    ”auth-access”(鉴权用户访问库的权限)、
    ”password-db”(指定用户名口令文件名)、
    ”authz-db”(指定权限配置文件名)、
    ”realm” (指定版本库的认证域),将这5处的注释”#”去掉,注意前面不要留空格,前4处无需修改,最后一处
    ”realm”后面改成自己的仓库名

启动SVN

(推荐)前面提到过将多个仓库放在同一个文件夹的好处,可以只启动一个服务管理多个仓库

1
svnserve -d -r /root/svn

(不推荐)也可以启动多个服务分别对应一个仓库,依次启动test1、test2、test3三个库的服务,若端口冲突则指定不同端口号

1
2
3
svnserve -d -r /root/svn/test1
svnserve -d -r /root/svn/test2
svnserve -d -r /root/svn/test3

启动服务可以指定端口(默认:3690)

1
svnserve -d -r /root/svn/test2 —listen-port 52020 svnserve -d -r /root/svn/test2 —listen-port 52020

服务启动后可以通过命令”netstat -antple | grep svn”查看服务状态

1
2
[root@localhost svn]$ netstat -antple | grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1000 2187961 23320/svnserve

若启动服务过程中报错”svnserve: E000098: 不能绑定服务器套接字: 地址已在使用”或”svnserve: Can’t bind server socket: Address already in use”,表示端口被占用,svn默认使用端口为3690,
”netstat -antple | grep 3690”查看使用3690端口的服务ID,然后调用命令将其干掉

1
2
3
[root@localhost svn]$ netstat -antple | grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1000 2208076 52013/svnserve
[root@localhost svn]$ kill 52013

设置开机自启svnserve服务:

1
vim /lib/systemd/system/svnserve.service
1
2
3
4
5
6
7
8
9
10
# 编辑下面文件中的“ExecStart”字段
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve -d $OPTIONS
[Install]
WantedBy=multi-user.target

接下来

1
vim /etc/sysconfig/svnserve

继续

1
2
3
4
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /root/svn" # 设置成自己仓库的路径,建议使用绝对路径

导入版本库

前面4步在svn服务器上执行完成后,接下来在本机(客户端)执行导入和检出

新建的仓库中什么也没有,这时候拉取下来则是空文件夹,我们可以向仓库中导入我们的项目

将本地文件夹/home/robin/project/test1导入仓库所在服务器”129.xxx.xxx.xxx”

1
svn import /home/robin/project/test1 svn://129.xxx.xxx.xxx/test1 -m "new project" --username=robin

检出

命令格式:svn checkout http://路径(目录或文件的全路径) [本地目录全路径] —username 用户名

其中checkout可以简写为co

1
svn checkout svn://128.116.72.218:36900/test1 /home/robin/project_test --username robin

分支与合并

当svn被广泛的使用后,开发的难度与量也越来越大,随之而来的就是多人开发,且多人提交一份代码。
但有因为某些业务要提前写又不能提前交,或多人改了一个文件导致冲突等,这时就需要用到svn分支,与合并分支来调节多人开发代码等提交问题。

那如何创建svn分支呢?

首页要检出主干项目代码

然后目录下创建一个分支

newdir即是新的分支目录

主要负责人负责主干合并

其他开发人员检出 newdir 枝干,开发人员负责提交枝干,然后通知主负责人合并枝干,再由主干提交到线上
【服务器上也会生成一个枝干目录,如果不在主检出目录下即不会生成】

那主负责人如何合并枝干呢
(建议不是太多人太多版本创建1到2个枝干即可)
如下图:

【一般用于第一个,具体还是看实际情况】

通过提交日志选定多个日志提交过程合并即可

以上便是合并到全过程 如果不太清楚可以照图进行尝试。
如合并成功后,记得主干到合并到代码还没提交到线上还是要svn commit 提交 才能之后进行下一次合并

【建议:记录每次合并日志,(截图)能更好清楚在日志多时到底要合并那些】