参考的文章链接:
SVN服务器搭建
STEP1:通过yum命令安装svn
#yum -y install subversion
STEP2:创建版本库目录
(此仅为目录,为后面创建版本库提供存放位置)
#mkdir /var/svn/svnrepo
STEP3:创建svn版本库
#svnadmin create /var/svn/svnrepo/xxxx (xxxx为你预期的版本库名称,可自定义)
创建成功后,进入xxxx目录下,ls一下,可以看到conf / db / format / hooks / locks /README.txt等内容。
注意:svn可以分为单个或多个版本库,假设:
单版本库:
版本库目录为 /var/svn/svnrepo/repo1
启动程序如果是:svnserve -d -r /var/svn/svnrepo/repo1
这代表你当前svn只为repo1这个版本库工作,客户端访问直接svn://IP/ 就可以了,后面不跟目录
多版本库:
启动程序如果是:svnserve -d -r /var/svn/svnrepo/
这代表你当前svn可以多版本库运行,客户端访问就需要加上 svn://IP/repo1 这样才能访问repo1版本库STEP4:配置修改
进入已经创建好的版本库目录下,也就是前文说创建的xxxx
进入conf文件夹
#cd /var/svn/svnrepo/xxxx/conf
下有3个文件,分别是:
authz:负责账号权限的管理,控制账号是否读写权限
passwd:负责账号和密码的用户名单管理
svnserve.conf:svn服务器配置文件
authz文件配置
如果是一个版本库,那应该设置成如下:
[groups]
admin = user1,user2
[/]
@admin=rw
如果是多个版本库,那就应该设置成这样:
[groups]
admin = user1,user2
[repo1:/]
@admin=rw
passwd文件配置
账号=密码
例如:user1=123456
svnserve.conf文件配置
如下图,按照红色框内的内容修改即可。
如此配置完成。
STEP5:防火墙开放svn端口
>/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
z'z'z'z/etc/init.d/iptables save
#service iptables restart
STEP6:启动SVN服务器
#svnserve -d -r /var/svn/svnrepo/repo1 单版本库启动方式
#svnserve -d -r /var/svn/svnrepo 多版本库启动方式
STEP7:配置操作系统语言(可选项)
要设置为中文,否则svn log的时候看是乱码。
当前生效
#export LANG=zh_CN.UTF-8
永久生效
#vi /etc/sysconfig/i18n
修改里面内容为
LANG="zh_CN.UTF-8"
查看语言环境命令
#locale
linux上使用SVN服务
checkout (co)
#svn checkout svn://IP/××××
import
svn import [源路径] [目标版本库路径] -m [日志信息]
源路径可以是相对路径,导入时会递归导入源路径下的所有文件和文件夹,目标版本库路径需要绝对目录
#svn import ./test file:///var/svn/svnrepo/repo1/test -m "inport src"
update (up)
#svn update
如果更新的时候,想要排除某些文件的话,也是用正则来排除。
#svn up !(config.php) 全部更新,但是排除config.php
#svn up !(config.*) 全部更新,但是排除config开头的文件
status (st)
#svn st
查看状态,未加入版本库的会显示“?”,从版本库中删除的会显示“!”,修改版本库中的文件会显示“M”
add
#svn add a.php 加入a.php
#svn add b.php c.php 加入b.php c.php
上面的方法是一个文件一个文件地添加,这样很麻烦。
#svn add add * --force 加入当前目录下的所有文件
注意上面只是针对同一目录的文件,如果目录下还有目录,这时上面的命令提交就不行了。
#svn add */* --force 如果是二级目录的话
#svn add */*/* --force 如果是三级目录的话
以此类推...
那么如果里面有很多级目录,该怎么办呢?或者说根本不清楚究竟有多少级。到svn根目录执行下面的命令。
#svn st | awk '{if ($1=="?") {print $2}}' | xargs svn add 目录几级未知的情况下,所以,一般使用这个语句
备注:上面有些的svn add命令后面都有加了--force,不然可能会报一些警告。
delete (del)
和add类似,如果不明确几级目录,那么就在svn根目录下执行如下命令。
#svn st | awk '{if ($1=="!") {print $2}}' | xargs svn del
commit (ci)
当svn add或者svn del或者修改了已经在版本库中的文件后,都需要svn commit一下,让代码变动提交到版本库中。
#svn commit -m "log message"
当提交版本的时候,要排除某些文件的时候,可以使用正则表达式来排除。例如:
#svn commit !(config.php) -m "test log" 除了config.php不提交,其他文件全部都提交到版本库中
#svn ci !(config*) -m "test log" 以config开头的文件不提交,其他全部提交
实例分析
step1:建立测试目录
结构如下:
step2:先svn import
这时候版本库中就有了testSvn(window下查看),如下:
step3:svn checkout
如果没有先svn checkout,而是直接在上述测试目录下进行svn操作(如:svn up/svn add等),是不行的。所以先删除上述测试目录,然后再checkout出来。
step4:测试add
在windows上,在/testSvn目录下,增加rootAddWindows.txt文件,然后在linux下update。
在linux上,在/testSvn目录下,增加rootAddLinux.txt和rootAddLinux1.txt文件,然后add和commit,然后在windows下update。
在linux上,
在/testSvn/testSvnChild目录下增加childAddLinux.txt文件,
在/testSvn/testSvnChild/testSvnChildChild目录下增加childchildAddLinux.txt文件,
在/testSvn/testSvnChild/testSvnChildChild目录下增加testSvnChildChildChild目录,
然后add和commit,然后在windows下update。
可以先在svn根目录下查看下svn status
step5:测试del
在linux上,删除上一步骤添加的文件和目录,然后再svn del和svn commit。
然后在windows下update,看下结果:
windows上使用SVN服务
在windows客户端,输入地址:svn://ip地址:3690/xxxx(iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)
弹出输入用户名和密码,输入即可访问