安装: yum install -y subversion
默认加载的配置文件为: /etc/sysconfig/svnserve
配置格式为:OPTIONS="--root /data/svn_data/"
Tips:-r [--root] 是指定运行的目录,需要以"/"结束
创建版本库之后相关文件与配置文件说明:
conf/ # 配置目录 ├── authz # 权限配置,注意空格;相关配置:目录;组名=组员;用户名=读写权限;组名=读写权限;*= 未配置的访问 ├── passwd # 用户配置,注意空格; 格式:用户名=密码 └── svnserve.conf # 版本库配置,注意空格 db # 版本数据 format # 未知 hooks/ # 钩子脚本目录 ├── post-commit.tmpl # 提交成功 ├── post-lock.tmpl # 提交锁定 ├── post-revprop-change.tmpl # ├── post-unlock.tmpl # 提交解锁 ├── pre-commit.tmpl # ├── pre-lock.tmpl # ├── pre-revprop-change.tmpl # ├── pre-unlock.tmpl # └── start-commit.tmpl # 开始提交 locks # 未知 README.txt # 相关说明
具体配置参数可查看 svnserve --help
常用操作:
svn --help 查看帮助
svn help commond 查看指定命令的帮助信息
1. svn info #显示当前工作目录的信息 2. svn list #显示当前工作目录中通过版本管理的文件, -v:每个文件或目录的详细信息,各字段含义 版本号 用户 文件大小 修改时间 对应的文件 3. svn cat -r 版本号 文件 # 显示指定版本的文件内容 4. svn log # 显示日志 svn log -r r1:r2 # 显示两个指定版本的日志 svn log file # 显示指定文件日志,如果要是目录,则加 -v 参数 svn log --limit N -v # 显示指定的记录条数 问题: svn log 显示 no author、 no date 解决:是在svnserve.conf 中开启了匿名配置即:anon-access的配置,关闭就好 5. svn diff 文件 # 显示以修改的差异 svn diff -r 3 file # 显示本地文件与指定的版本号相差 svn diff -r r1:r2 file # 指定的两个版本之间的差异 6. svn revert file # 还原当前修改的文件 7. svn commit -m "提交说明" file # 提交相应的文件到版本库 8. svn add file # 添加相应的file到版本库中,不提交 9. svn update -r r1 # 更新到指定版本,没有-r参数,则默认最新 10. svn resolve file # 标记冲突已解决 11. svn clean # 清除缓存垃圾 12. svn switch --relocate 旧地址 新地址 # 切换版本库的URL
管理员操作:
1. 导出
svnadmin dump /svn/path/data > data.dump # 全量导出
svnadmin dump -r r1:r2 --incremental > r1-r2-data.dump # 增量导出
2. 导入:前提是新库必需存在;所有导入的版本号必需是连续的,中间不能断的;
svnadmin load /svn/path/ < data.dump
2.1 如果被导入库的版本号与被导入文件的版本号可连接,如被导入库当前版本为10,而被导入文件为11到12版,则被导入库可正常被更新为12版;
2.2 如果被导入库的版本号与被导入文件的版本号不可连接,如被导入库当前版本为10,而被导入文件为12到12版,则被导入库版本更新为11,本更新的文件为导入文件里的12版
2.3 如果被导入库的版本号与被导入文件的版本号重叠,如被导入库当前版本为10,而被导入文件为10到12版,则被导入库版本更新为13,被导入文件里的第10号也被当作新的版本
3. 创建版本库
# 创建版本库,地址: svn://host/版本库的realm名,注意此处使用的svn协议
svnadmin create /svn/path
注意:SeLinux 关闭
启动: svnserve -d -r /svn/path 或者 systemctl start svnserve
默认的端口: 3690
firewall 防火墙: firewall-cmd --permanent --add-port=3690/tcp firewall-cmd --reload
附:init_svnserve 脚本
#!/bin/bash # # svnserve Startup script for the Subversion svnserve daemon # # chkconfig: - 85 15 # description: The svnserve daemon allows access to Subversion repositories \ # using the svn network protocol. # processname: svnserve # config: /etc/sysconfig/svnserve # pidfile: /var/run/svnserve.pid # ### BEGIN INIT INFO # Provides: svnserve # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Short-Description: start and stop the svnserve daemon # Description: The svnserve daemon allows access to Subversion # repositories using the svn network protocol. ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions # 加载配置文件,即启动配置文件 if [ -f /etc/sysconfig/svnserve ]; then . /etc/sysconfig/svnserve fi exec=/usr/bin/svnserve prog=svnserve pidfile=${PIDFILE-/var/run/svnserve.pid} lockfile=${LOCKFILE-/var/lock/subsys/svnserve} # 启动参数 args="--daemon --pid-file=${pidfile} $OPTIONS" [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog lockfile=/var/lock/subsys/$prog start() { [ -x $exec ] || exit 5 [ -f $config ] || exit 6 echo -n $"Starting $prog: " daemon --pidfile=${pidfile} $exec $args retval=$? echo if [ $retval -eq 0 ]; then touch $lockfile || retval=4 fi return $retval } stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} $prog retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop start } reload() { restart } force_reload() { restart } rh_status() { # run checks to determine if the service is running or use generic status status -p ${pidfile} $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 restart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 ;; esac exit $?