SVN日常笔记
这里记录SVN日常使用的技巧
快速安装:
apt-get install subversion
使用方法:
1.将文件checkout到本地目录
svn checkout svn://192.168.0.1/project/malume
简写:svn co
2.往版本库中添加新的文件
svn add test.php (添加test.php)
svn add *.php (添加当前目录下所有的php文件)
3.将改动的文件提交到版本库
svn commit -m "add test file for my test" test.php
4.更新到某个版本
svn update (如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。)
svn update -r 200 test.php (将版本库中的文件test.php还原到版本200)
svn update test.php (更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update)
5.批量添加文件
svn st | awk '{if ( $1 == "?") { print $2}}' | xargs svn add
6.批量删除文件
svn status|grep ! |awk '{print $2}'|xargs svn del
7.修改SVN中文件的可执行属性
添加可执行属性:
svn propset svn:executable on test.c
svn commit -m "test" test.c
删除可执行属性:
svn propdel svn:executable test.c
svn commit -m "test" test.c
为所有文件权限提交:
svn propset svn:executable on *
svn commit -m "test"
统计用户一段时间内修改了哪些文件
比如要看从5月1号到18号我的修改记录
svn log -r {2016-5-1}:{2016-5-19} --search malu -v -q
-v 显示改动文件列表
-q 简化返回内容(去除了注释)
当然这不是最终想要的,接下来拿出强大的vim编辑器:
把结果导出或者copy到文本中,用vim打开:
先把杂项过滤(保留文件列表):
:g!/^ /d
删除不含字符串’空格空格空格’开头的行(^后是三个空格),表以三个空格开头的行都保留。
接下来Ctrl+v进入行编辑模式,把前面空格和M、A等前缀删掉。
然后排序:
:sort
这一步是必须的,因为删除重复行只能去除相邻的。
然后删除重复行:
:g/^\(.*\)$\n\1$/d
完成。
注:以上终端下操作较为复杂,建议在windows图形界面操作,方便快捷:
** svn log ->过滤用户名、日期->选中所有->复制path里的所有文件 **
svn服务端
搭建HTTP方式访问SVN服务端
1.安装必须的组件
apt-get install apache2 libapache2-svn subversion apache2-utils
2.创建存储仓库
mkdir -p /app/svn
svnadmin create /app/svn
chown -R www-data:www-data /app/svn
3.打开apache的配置文件,修改dav_svn.conf的配置
vim /etc/apache2/mods-enabled/dav_svn.conf
<Location />
DAV svn
SVNPath /app/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /app/svn/conf/pass
Require valid-user
</Location>
4.为SVN添加用户
htpasswd -c /app/svn/conf/pass username
5.重启apache服务
/etc/init.d/apache2 restart
接下来访问apache试试看
HTTP SVN的权限管理
以上操作仅仅是生成了所有权限的用户,接下来对目录进行读写权限划分:
1.再生成一个用户
htpasswd -b /app/svn/conf/pass username2 password
2.修改dav_svn.conf的配置,添加AuthzSVNAccessFile
vim /etc/apache2/mods-enabled/dav_svn.conf
<Location />
DAV svn
SVNPath /app/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /app/svn/conf/pass
<IfModule mod_authz_svn.c>
AuthzSVNAccessFile /app/svn/conf/authz
</IfModule>
Require valid-user
</Location>
3.修改/app/svn/conf/authz,例如:
[/]
malu = rw
bb = rw
[/project]
bb = r
注:malu和bb具有/目录的读写权限,但是bb用户对/project目录只有读权限
服务端仓库目录在/app/svn/db下,里面的revs和revprops分别存放着每次提交的差异数据和日志等信息
*配置SVN的访问路径以及相关参数说明
<Location /svn > # 通过http://HOST/svn/访问SVN服务器 Dav svn #必需 # 说明D:/SVN_REPOS下的所有目录均为仓库 SVNParentPath "D:/SVN_REPOS" # 在网页中列出D:/SVN_REPOS下的所有仓库 SVNListParentPath on # 基本的用户名密码验证方式 AuthType Basic # 认证名称,作提示用 AuthName "SVN Repository" # 用户名密码文件,并非之conf下的passwd文件 AuthUserFile "D:/SVN_REPOS/Test/conf/users“ # 权限控制文件 AuthzSVNAccessFile "D:/SVN_REPOS/Test/conf/authz" # 只有通过认证才能访问网页 Require valid-user </Location> # 重定向处理,用于将http://HOST/svn地址重定向为http://HOST/svn/ RedirectMatch ^(/svn)$ $1/
搭建普通SVN服务器
在以上SVN服务端安装好的基础上
1.修改配置文件/app/svn/conf/svnserve.conf:
[general]
anon-access=none
auth-access=write
password-db=/app/svn/conf/passwd
authz-db=/app/svn/conf/authz
realm=svn
2.修改密码文件/app/svn/conf/passwd:
[users]
malu=password
li=li
3.修改认证文件/app/svn/conf/authz:
[/]
malu = rw
li = rw
bb = rw
[/aa]
bb = r
注意:以上配置文件行左右都不要有空格出现!!!
否则将出现:svn: E215004: Authentication failed
4.最后启动服务:
svnserve -d -r /app/svn --config-file /app/svn/conf/svnserve.conf --listen-port=87017
svn钩子
启动服务:
svnserve -d -r /svn/
进目录:
cd /svn/hooks/
vim post-commit
#!/bin/bash
export LANG=en_US.UTF-8
export PATH=$PATH:/var/www/console
/usr/bin/svn update /var/www --username malu --password xxx --no-auth-cache
注意:–no-auth-cache参数必须加上,不然更新会用系统里保存帐号
给post-commit执行权限
chmod 777 post-commit
SVN钩子根据项目路径触发调取jenkins自动构建脚本
vim post-commit