/******开始*********/

系统环境:Centos 6.5

第一步:通过yum命令安装svnserve,命令如下:

>yum -y install subversion

此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行

若需查看svn安装位置,可以用以下命令:

>rpm -ql subversion

第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)

选择在var路径下创建版本库,当前处于根目录下,一次性创建如下:

>mkdir /var/svn/svnrepos

第三步:创建svn版本库

在第二步建立的路径基础上,创建版本库,命令如下:

>svnadmin create /var/svn/svnrepos/xxxx   (xxxx为你预期的版本库名称,可自定义)

创建成功后,进入xxx目录下

>cd /var/svn/svnrepos/xxxx

进入目录,可以看见如下文件信息:

linux建svn仓库 linux svn服务器搭建和使用_svn

第四步:配置修改

进入已经创建好的版本库目录下,也就是前文说创建的xxxx

进入conf

>cd /var/svn/svnrepos/xxxx/conf

conf目录下,一共存放三份重要的配置文件,如下:

linux建svn仓库 linux svn服务器搭建和使用_svn服务器_02

 

authz:负责账号权限的管理,控制账号是否读写权限

passwd:负责账号和密码的用户名单管理

svnserve.conf:svn服务器配置文件

细节修改如下:(希望大家严格按照以下信息,不用参考网络上其他资料)

修改authz文件信息,如下:

>vi authz

在文件内容的末尾,添加如下:

linux建svn仓库 linux svn服务器搭建和使用_版本库_03

 

只需在末尾添加,无需在文件其他部分修改和添加任何东西(请忽略groups被我马赛克的地方,那其实也是条无用的记录,我忘记删掉而已),末尾内容如下:

[\]

账号1 = rw

账号2 = rw

。。。。。

rw表示赋予此账号可读写的权限,请注意[]中的斜杠,一定是反斜杠,有些教程说,需添加版本库名称在括号内,我直接建议就这写,这样写允许访问的权限更大,避免一些错误

修改passwd文件信息

>vi passwd

账号密码文件无需做修改,也是直接将账号和密码信息追加到文件中即可,注意格式为:

账号 = 密码

例如:admin = 123456

修改svnserve.conf(重要)

vi svnserve.conf

原始文件内容,都被注释掉的,我们只需要去掉4条指定内容前注释即可,如下:

linux建svn仓库 linux svn服务器搭建和使用_svn服务器_04

 

大多数网络资料,都会让大家将authz-db = authz这条给去掉注释,经过我本人多次被坑经验,此条去掉后,虽然svn服务器可以连接,但一直会提示“认证失败”,注释掉即可正常

还有多数资料会让大家在realm = My First Repository处填写服务器ip,经过测试,填写后并无什么用处,所以大家去掉注释即可,无需做任何修改

到此,配置已经全部完成,账号信息已经添加成功

第五步:防火墙开启

多数情况下服务器安装完成,配置完成后,无法连接svn服务器,均是防火墙问题,大家按照如下3条命令逐一执行即可

>/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT

>/etc/init.d/iptables save

>service iptables restart

执行结果如下图:

linux建svn仓库 linux svn服务器搭建和使用_svn服务器_05

 

六:启动svn服务器

在跟目录下,执行如下命令:

>svnserve -d -r /var/svn/svnrepos

>svnserve -d -r /var/svn/    第一步创建svn 版本库的地址

启动成功后,可用ps -aux查看服务启动是否成功

七:客户端访问svn服务器

在windows客户端,输入地址:svn://ip地址:3690/xxxx   (iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)

弹出输入用户名和密码,输入即可访问


7.1、svn 配置


svnserve.conf:
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
passwd:
[users]
admin=123
authz:
[groups]
[/]
admin= rw



7.2、关闭防火墙



RedHat Enterprise Linux 7关闭防火墙方法
原来在RHEL7开始,使用systemctl工具来管理服务程序,包括了service和chkconfig
禁用防火墙
[root@rhel7 ~]# systemctl stop firewalld.service  (这个是关闭防火墙的)
[root@rhel7 ~]# systemctl disable firewalld.service
[root@rhel7 ~]# systemctl status firewalld.service


7.3、linux svn 操作


添加branches,tags,trunk目录
$ mkdir branches
$ mkdir tags
$ mkdir trunk

$ svn add branches trunk tags
$ svn ci -m 'create branches trunk tags dir'




7.4、主干 标记 分支 的使用


trunk(主干|主线) branchs(分支) tags(标记)
1、truck(主干|主线|主分支):是用来做主方向开发的,新功能的开发应放在主线中,当模块开发完成后,需要修改,就用branch。
2、branch(分支):分支开发和主线开发是可以同时进行的,也就是并行开发,分支通常用于修复bug时使用
3、tag(标记):用于标记某个可用的版本,可以标记已经上线发布的版本,也可以标记正在测试的版本,通常是只读的

4. 将branch和trunk进行合并,操作步骤如下:
         右键 branches/MyAppProject ------>TortoiseSVN
         ----> Merge... 
         ---> Merge a range of revisions 
         ----> Next --->URL to merge from : file:///D:/TortoiseSVN/Repository/Repo-iOS/trunk/MyAppProject 
         ----> Next
         ----> Merge
 5. 将trunk和branches进行合并 步骤如下,
  右键/turnk/MyAppProject ----> Merge... -----> Merge a range of revisions   -----> Next 
----->  URL to merge from : file:///D:/TortoiseSVN/Repository/Repo-iOS/branches/MyAppProject
  步骤同上,只是  URL to merge from   的路径不一样。





八、问题总结


1、checkout时,提示:URL svn://192.168.1.99/svntest doesn't exist...

奇怪,怎么会提示库不存在呢?肯定是哪里配置问题。后来尝试了半天,也在网上搜索了很久,终于发现问题所在。

如果你的svn库的路径为:/home/svn/svntest

那么你启动时,不能用命令:

svnserve -d -r /home/svn/svntest

而要用命令:

svnserve -d -r /home/svn/

2、commit时,提示:Authorization failed

开始一直以为是authz文件配置得不对,一直尝试,一直修改,还是不行,郁闷了。在确定authz的配置完全没问题后,开始查其它两个配置文件的问题。后来终于发现问题出在svnserve.conf这个文件。以下四行:



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



是被注释掉的,虽然文件说明里面说默认就是按注释掉的配置来执行,但好像并不是这样。放开注释:



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



问题解决。

PS:有些童鞋问文件上传到服务器后存放在服务器的哪个地方。

答:一般放在/home/svn/svntest/db/revs(根据我自己的目录结构)里面。

 错误3





服务无法启动或者启动服务,找不到服务






can't  connect  to host  ip





解决:关闭win防火墙,察看端口是否启用,一般防火墙关了服务就可以启动了。




察看端口: netstat -ano




svn的端口是3690







4、svn服务重启命令





只需要简单3步。




1 首先查看svn的进程




查看进程命令:ps -ef(查看所有进程);要筛选的话用grep,筛选svn的进程命令:ps -ef|grep svn。




linux建svn仓库 linux svn服务器搭建和使用_svn服务器_06




2  杀死主进程




杀死进程的命令用kill -9 进程id。




linux建svn仓库 linux svn服务器搭建和使用_svn服务器_07




3:启动svn




启动svn的命令用svnserve -d -r安装路径




-d表示svnserve.exe作为服务程序运行在后台;-r表示将svn的目录当作根目录。




linux建svn仓库 linux svn服务器搭建和使用_svn服务器_08






5、linux 下svn建立钩子自动提交代码


利用SVN的钩子同步更新代码的方法详解

先普及一下小常识

SVN的钩子,即hook(在每个版本库下有hooks文件夹,里面有很多钩子程序,我的目录是/home/svn/fitness/hooks/)。在subversion执行一个操作时,就会相应的首先去调用相关的钩子程序。

 

我们在开发时都会建立测试环境,不需要每个人都Update到本地再测试。

基于SVN的这种特性,要想实现一个同步的测试服务器,我们只需要在用户执行完毕commit操作后,让钩子程序自动更新测试服务器的文件即可。

有了这样的思路,我们就开始建立post-commit的钩子吧

 

1、在网站的目录下,使用checkout命令建立一个副本 #svn co SVN_URL /var/www/mySite/

  例如:svn co svn://192.168.1.233/project /var/www/www.doubilaile.com/

  这句话的意思其实就是将仓库中得代码checkout到/var/www/www.doubilaile.com/这个目录下。

 

2、现在设置钩子,复制仓库project中的/hooks/post-commit.temp文件为post-commit,并修改文件的权限#chmod 755 post-commit

 

3、编辑post-commit,把以下代码写入

#!/bin/sh
export LANG=zh_CN.GBK
svn update --username ruanwenwu --password 207099 /home/www/www.doubilaile.com



第一条命令是window本地字符编码,第二条是同步 

大功告成,可以使用了。关于这个post-commit文件,可以完全采用上面的语句,不用管默认的。亲测可以通过。至此,一个完整的SVN同步,并在测试环境下同步的工作便完成了。