SVN:入门级安装和源码安装、Hooks设置

来源:互联网 发布:网络快车的新政策 编辑:程序博客网 时间:2024/05/18 21:09

新:

1. mkdir /data/svn

2. svnadmin create data

3. svnserve -d -r /home/huangz/data/svn/data --listen-port 8999

4.在本机:svn co file:///home/huangz/data/svn/data,远程 svn co svn://192.168.1.191:8999 data


1.在Ubuntu系统中下载和安装SVN

(开源的项目,其官网为http://subversion.apache.org/packages.html)

在Ubuntu中可以直接使用以下命令进行安装:

$ apt-get install subversion$ apt-get install libapache2-svn

 2. 我的工作目录在/home/hz/下,故在创建SVN项目仓库时:(注意该用户需要有对目录的操作权限)

$mkdir /data/ 创建目录

$mkdir /data/svn 创建svn根目录
$svnadmin create/data/svn/drug //创建项目仓库drug
$svn import -m "导入SVN" /project  file:///home/hz/data/svn/drug 将当前目录的project文件夹导入SVN项目库中。

即完成初步的创建工作。

3. 开启SVN服务

  svnserve --help

 svnserve -d -r /home/hz/data/svn/drug / --listen-port 8999    //开启服务,端口号为8999

至此,如果该机器的IP为10.65.9.200,在window下可以安装小乌龟(我装的版本是TortoiseSVN-1.7.3.22386-win32-svn-1.7.2)进行check out。地址应写成svn://10.65.9.200:8999。则可以自动将drug目录下的内容下载。


 

其他辅助命令

 1068  ping -c 1 jx-dt-dev01.jx              //ping,查看网络是否通
 1069  netstat -a|grep 8999                //查看网络状态
 1071  cd drug
 1072  ll
 1073  cd conf       //用户组和权限的配置文件
 1074  ll
 1075  cat passwd   //查看用户组及权限 
 1076  cat authz     //查看用户组及权限

ping -c 1 hz.jx

svnserve -d -r /home/hz/repos --listen-port 5918

ps ux

kill -9 18809

补充说明:

1.来到E:\svn\sise_repository\conf目录,修改svnserve.conf: 
# auth-access = write 
# password-db = passwd 
改为: 
auth-access = write //通过验证的用户才能有读写的权限 
password-db = passwd //验证用户所使用的文件passwd 

2.然后修改同目录的passwd文件,去掉下面三行的注释: 
# [users] 
# harry = harryssecret 
# sally = sallyssecret 
最后变成: 
[users] 
harry = 123456 //以名值的方式存储用户名和密码 “用户名=密码” 
sally = 654321 

3.一样的,修改同目录下的authz文件来设置访问权限 
在[groups]下创建用户组例如这里是 
[groups] 
Admin=admin 
Developer=developer1,developer2 
以上便创建了两个用户组,分别是admin和developer和其相应的组的成员。 
设置访问路径(记得需要设置
[/] 
*=r 
@admin=rw 
如上所示,所有的用户对整个svn目录下的文件都可以读取,admin组有读写的权限(“*”代表所有的用户,r代表读 w代表写) 
可设置具体的版本库的访问权限如下: 
[版本库A:/] 
@developer=rw 
如上设置,表示所有developer组的成员对于“版本库A”下边的所有文件都有读写的权限 

我的配置:As shown below each section defines authorizations for the path and
(optional) repository specified by the section name.

# [/foo/bar]
# harry = rw
# &joe = r
# * =
[/test]  #则 checkout 时应svn://10.65.9.200:8999/test  如果[/] 则 checkout 时应svn://10.65.9.200:8999 
* =
udw = rw
hz = r
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[repos:/]
udw = rw
hz = r
* =


源码安装方法

下载与安装

1)从http://subversion.apache.org/source-code.html下载源码,我下的版本subversion-1.7.2.tar.gz。

tar xzvf subversion-1.7.2.tar.gz

cd subversion-1.7.2

./configure --prefix=/home/work/local/svn

将出错,报错:缺依赖项apr。

2)百度一下,可以下载到apr、我下的版本apr-1.4.5.tar.gz。解压和安装:

tar xzvf apr-1.4.5.tar.gz 
cd apr-1.4.5

./configure --prefix=/home/huangzhen01/local
./configure --prefix=/home/huangzhen01/local/apr

 make
 make install

回到 subversion-1.7.2目录:

cd ..
 cd subversion-1.7.2

 ./configure --prefix=/home/huangzhen01/local/svn --with-apr=/home/huangzhen01/local/apr/

将出错,报错:缺依赖项apr-util。

3)百度一下,下载apr-util。我下的版本apr-util-1.4.1.tar-gz。解压和安装:

1002  tar xzvf apr-util-1.4.1.tar.gz 
 1003  cd apr-util-1.4.1
 1004  ll
 1005  ./configure --prefix=/home/huangzhen01/local/aprutil --with-apr=/home/huangzhen01/local/apr
 1006  make
 1007  make install
 1008  cd ..
 1009  cd subversion-1.7.2
 1010  ./configure --prefix=/home/huangzhen01/local/svn --with-apr=/home/huangzhen01/local/apr/ --with-apr-

util=/home/huangzhen01/local/aprutil/

将出错,报错:缺依赖项sqlite。

4)百度一下,下载sqlite源码。我下的版本sqlite-autoconf-3070900.tar.gz。解压和安装: tar xzvf sqlite-autoconf-3070900.tar.gz 
 1014  cd sqlite-autoconf-3070900
 1015  ll
 1016  ./configure --prefix=/home/huangzhen01/local/sqlite
 1017  make

 1021  make install
 1022  cd ..
 1023  cd subversion-1.7.2
 1024  ./configure --prefix=/home/huangzhen01/local/svn --with-apr=/home/huangzhen01/local/apr/ --with-apr-util=/home/huangzhen01/local/aprutil/ --with-sqlite=/home/huangzhen01/local/sqlite/
 1025  make
 1026  make install

安装完毕。


SVN的Hooks功能--强制添加注释和允许修改注释

很多SVN版本库在提交代码的时候要求添加注释信息,而且还有最短长度的限制。这是如何实现的?这个话题就涉及到了svn的Hooks功能的使用。

本文欢迎自由转载,但请标明出处和本文链接,并保持本文的完整性。
CU: Godbach(http://blog.chinaunix.net/u/33048/showart_1908522.html)
Apr 23, 2009


所谓hooks,可以类似理解Linux内核Netfilter框架的hook点和hook函数的概念。当用户在维护代码的过程中,其执行的相关动作正好触发了相关hook点,就会去执行对应hook点的脚本。

SVN版本库目录下有hooks目录,里面有很多.tmpl的文件。这些文件用以定义某些动作触发的hook脚本。默认状态下,这些脚本的后缀都是.tmpl,是没有起作用的。相当于Netfilter的各个hook点没有注册hook函数。所以,当用户执行相关维护代码动作的时候,也不会触发hook脚本。因此,在默认状态下,用户提交代码的时候,不用添加注释信息也会被版本看所接受。而且,用户想修改自己的注释时,会得到服务器拒绝的相关提示信息(本人搭建的svn server是这样的默认情形)。

那么如何设置hook脚本以保证强制用户添加注释,以及允许用户修改注释呢?

1. 强制添加注释信息( 经过以下约6个步骤 )
用户提交代码的动作,对应的是pre-commit。因此,可以修改pre-commit.tmpl文件。
文件名修改为pre-commit, Windows下可以修改为pre-commit.bat。这样可以让系统知道该文件时可执行文件。

将文件中以下几行内容注释掉, 前面添加'#' 
$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 "nLog 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
经过该设置,用户提交代码时注释信息小于5个字符将会得到警告,并且代码不会被提交到版本看

2. 允许用户修改注释信息
用户修改注释信息的动作,对应的是pre-revpos-change. 将hooks/下pre-revpos-change.tmpl
更名为pre-revpos-change。通常该文件包含的功能就是允许用户修改注释信息,因此只要将该文件加上可执行权限即可:
#chmod +x pre-revpos-change

默认文件内容如下,如果不是下面这些内容的话,可以对照修改即可:

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; 
then 
exit 0; 
fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1
这样,就可以允许用户修改注释信息了。

以上对SVN的配置,参考了如下连接的内容,在此表示感谢:
http://hi.baidu.com/cnydpl/blog/item/9d6ac931d300fa1eeac4af63.html

下面是SVN版本库在Win下建立的,允许用户修改注释信息的脚本:

@ECHO OFF 
set repos=%1 
set rev=%2 
set user=%3 
set propname=%4 
set action=%5 

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
:: Only allow changes to svn:log. The author, date and other revision 
:: properties cannot be changed 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME 

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
:: Only allow modifications to svn:log (no addition/overwrite or deletion) 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
if /I not '%action%'=='M' goto ERROR_ACTION 

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
:: Make sure that the new svn:log message contains some text. 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
set bIsEmpty=true 
for /f "tokens=*" %%g in ('find /V ""') do ( 
set bIsEmpty=false 

if '%bIsEmpty%'=='true' goto ERROR_EMPTY 

goto :eof 



:ERROR_EMPTY 
echo Empty svn:log properties are not allowed. >&2 
goto ERROR_EXIT 

:ERROR_PROPNAME 
echo Only changes to svn:log revision properties are allowed. >&2 
goto ERROR_EXIT 

:ERROR_ACTION 
echo Only modifications to svn:log revision properties are allowed. >&2 
goto ERROR_EXIT 

:ERROR_EXIT 
exit /b 1 

在Win下pre-revpos-change文件名应改为pre-revpos-change.bat,这样Win知道是可执行文件。
Win下的修改方式参考了如下链接:
http://svn.haxx.se/users/archive-2006-03/0107.shtml


原创粉丝点击