1、Svn相关知识
- SVN简介
Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
- SVN中的一些概念 :
- repository(源代码库)
源代码统一存放的地方
- Checkout (提取)
当你手上没有源代码的时候,你需要从repository checkout一份
- Commit (提交)
当你已经修改了代码,你就需要Commit到repository
- Update (更新)
当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更
重启apache服务和启动svn服务
重启apache服务
[root@cc ~]# /usr/local/apache/bin/apachectl -k restart
如果只是启动不用加-k
直接
apachectl start
apachectl stop
启动svn服务
[root@cc ~]# /usr/local/svn/bin/svnserve -d -r /svn/project/www(这个是定义的版本库的位置)
2、版本库创建
- 创建版本库(也就是目录)的方法如下(创建目录)
svn import /tmp/svnrepos/ file:///svn/svnrepos/ -m "add yw dir"
其中/tmp/wuzhiyong/是临时创建的,在这个目录下面创建的空目录,你导入的话,就会将这些空目录的名称作为版本库的版本库名称
svn import /tmp/wuzhiyong/ file:///svn/projectq/www -m "chushihua"
3、删除版本库的方法
可以直接使用客户端连接删除
- 客户端使用方法
选择本地一个存放版本库的地方----右键--新建文件夹---
右键 Checkout(要安装好客户端,完全安装了,右键才能看到SVN Checkout)
然后选择下载版本库目录,如下图
ok之后,就把文件下载下来了
下载来之后,可以直接修改文档(修改完成之后)会有个红色的!,如下图
然后可以直接将这个目录add(或者对修改的文件直接commit即可)
再commit
填上备注信息,就可以完成文件的上传了
遇到的问题集绵
一般如果不指定目录会报下面的错误
ERR subversion/svnserve/serve.c 2847 210005 No repository found in 'svn://
可以在--log-flie=/var/run/svnserve.log指定日志路径
svn如果运行时间过久,会出现所有不能访问的现象
unable to connect to a repository at
这时候要重启服务,指定好原来的仓库就可以了
[root@svn conf]# ps aux | grep svn
root 2289 0.0 0.0 152860 996 ? Ss 15:52 0:00 /usr/bin/svnserve --daemon -r /svn/20150630/ --pid-file=/var/run/svnserve.pid
root 2396 0.0 0.0 103244 880 pts/2 S+ 15:57 0:00 grep svn
[root@svn conf]#
使用kill命令kill掉
然后在启动一遍(要指定一下仓库目录,否则是可能启动了还是不能访问)
/usr/bin/svnserve --daemon -r /svn/20150630/ --pid-file=/var/run/svnserve.pid
公司商务通的svn的密码:
root
如果想让每一次上传和下载文件或者是目录都需要写注释的话,可以如下的操作
(Linux系统):
1.进入仓库/hooks目录,找到pre-commit.tmpl文件,重命名,去掉后缀.tmpl。 编辑pre-commit文件:
将:
$SVNLOOK log -t "$TXN" "$REPOS" |
grep "[a-zA-Z0-9]" > /dev/null || exit 1
commit-access-control.pl "$REPOS" "$TXN"
commit-access-control.cfg || exit 1
这三行注释掉(前面加#符号),
在此位置添加如下几行:
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep
"[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 5 ];#要求注释不能少于5个字符,您可自定义
then
echo -e "
Log message cann't be empty! you must input more than 5
chars as comment!." 1>&2
exit 1
fi
保存,退出。
给pre-commit添加可执行权限:
chmod +x pre-commit
配置结束,可以使用了
原理
SVN挂钩子详解(例如在提交时必须写message)
SVN本身并不提供这种强制写log的功能,而是通过一系列的钩子程序(我们称为hook脚本),在提交之前(pre-commit),提交过程中(start-commit),提交之后(post-commit),调用预定的钩子程序来完成一些附加的功能。
本次我们要实现的是在提交到版本库之前检查用户是否已经写了注释,当然要使用pre-commit这个钩子程序。我们打开SVN的repository下的hook目录,可以发现有好几个文件,其中一个是“pre-commit.tmpl”。这个文件是一个模板文件,它告诉了我们如何实现提交前控制
这是商户通svn的pre-commit的内容
[root@swt-svn hooks]# pwd
/svn/svnrepos/hooks
[root@swt-svn hooks]# cat pre-commit20160401.bak
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)
if [ "$LOGMSG" -lt 10 ]; then
echo -e " 提交文件时必须添加注释,提交中止."1>&2
exit 1
fi
mv pre-commit20160401.bak pre-commit,然后设置其为可执行的状态就可以了
公司svn排错
1、配置文件出错导致的错误
如下,配置文件有错误
查看日志如下
说authz这个里面有一个group中,newsvn_ios是没有定义的;所以肯定是配置文件有错误
2、svn假死导致不能启动
[root@svn conf]# ps aux | grep svn
root 26084 0.0 0.0 152860 872 ? Ss Aug03 0:00 svnserve -d -r /svn/20150630 --log-file=/var/log/svnlog
重新kill掉进程,再启动