svn 教程
svn安装
Linux系统安装svn
centos系统
1
yum install subversion
buntu系统
1
apt install subversion
查看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 | svnadmin create /root/svn/test1 |
查看新建仓库。在仓库”./test1/conf”
下有“authz”
、”passwd”
和”svnserve.conf”
3个配置文件分别表示:权限配置文件、用户名口令配置文件、svn服务配置文件
1 | [root@localhost svn]$ cd /root/svn |
配置SVN
这一步主要是配置上一步生成的“authz”
、”passwd”
和”svnserve.conf”
3个配置文件;
将所有的仓库都执行一遍以下3步:
配置“authz”
[groups]下是用户分组,可以有多个组,我这里分组”admin”下有一个”robin”用户;
”@admin = rw”表示拥有读写权限,”* = “表示其他用户没有权限访问。配置”passwd”
“[users]”下对应用户名和密码,我这里用户名”robin”对应密码是”123456”,你可以自己设置配置”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 | svnserve -d -r /root/svn/test1 |
启动服务可以指定端口(默认: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 | [root@localhost svn]$ netstat -antple | grep svn |
若启动服务过程中报错”svnserve: E000098: 不能绑定服务器套接字: 地址已在使用”或”svnserve: Can’t bind server socket: Address already in use”,表示端口被占用,svn默认使用端口为3690,”netstat -antple | grep 3690”
查看使用3690端口的服务ID,然后调用命令将其干掉
1 | [root@localhost svn]$ netstat -antple | grep 3690 |
设置开机自启svnserve服务:
1 | vim /lib/systemd/system/svnserve.service |
1 | # 编辑下面文件中的“ExecStart”字段 |
接下来
1 | vim /etc/sysconfig/svnserve |
继续
1 | # OPTIONS is used to pass command-line arguments to svnserve. |
导入版本库
前面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
提交 才能之后进行下一次合并
【建议:记录每次合并日志,(截图)能更好清楚在日志多时到底要合并那些】