Skip navigation.

极湖

无不用其“极”

Posts tagged with "Subversion"

通过 Subversion 的 hook 自动更新代码

,

用 subversion (以下简称 svn) 做版本管理,可以免去 ftp 上传代码的过程,具体方法是通过 svn 的 commit hook 自动更新代码。

以下是设置的步骤:

切换到 root 用户。
# su -

导出项目。
# cd /home
# svn checkout --username USER_NAME --password USER_PASS http://localhost/svn/PROJECT_NAME/trunk/ PROJECT_NAME
# chown -R USER_NAME PROJECT_NAME


编写 shell 脚本。
# vi /home/USER_NAME/bin/svn_auto_update.sh
输入
#!/bin/sh
date >> /tmp/svn_auto_update
cd /home/PROJECT_NAME
echo "$1 --- $2" >> /tmp/svn_auto_update  2>&1
svn status | awk '/^?/ {print $2}'  | xargs rm -Rvf >> /tmp/svn_auto_update 2>&1
svn update --username USER_NAME --password USER_PASS >> /tmp/svn_auto_update 2>&1

更改脚本的所有者。
# chown -R USER_NAME PROJECT_NAME /home/USER_NAME/bin/svn_auto_update.sh

设置 svn 的 hook。
# cd /home/svnrepo/PROJECT_NAME/hooks
# cp post-commit.tmpl post-commit
# chmod a+x post-commit
# vi post-commit

追加
date >> /tmp/svn_log
/usr/bin/sudo -H -u USER_NAME /home/USER_NAME/bin/svn_auto_update.sh $REPOS $REV >> /tmp/svn_log &


把 apache 用户加入 sudoer。
# usermod -G apache USER_NAME
# visudo

追加
apache  ALL=(USER_NAME) NOPASSWD: /home/USER_NAME/bin/svn_auto_update.sh


说明:

1.以上命令和代码中的 USER_NAME 是用户名,USER_PASS 使用户密码,PROJECT_NAME 是项目名,不同环境会有不同的名字。

2.以上设置,前提是 apache 和 subversion 在同一台机器上,svn 项目已经建立,apache 的 svn 设置也已经做好。

CentOS 下安装配置 Subversion

CentOS 下安装配置 Subversion (简明实用)

用 yum 安装 apache 模块。
# yum install mod_dav_svn

创建库。
# cd /home
# mkdir svnrepo
# cd svnrepo
# svnadmin create project1
# svn mkdir file:///home/svnrepo/project1/trunk file:///home/svnrepo/project1/tags file:///home/svnrepo/project1/branches -m "initial repository layout"

更改目录的所有者为 apache 用户。
# chown -R apache.apache project1

创建用户认证文件(采用Digest)。
# htdigest -c .htdigest 'Subversion Area' admin
Adding password for admin in realm Subversion Area.
New password: (输入密码)
Re-type new password: (输入密码)

追加用户。
# htdigest .htdigest 'Subversion Area' user1
# htdigest .htdigest 'Subversion Area' user2

设置 Apache。
# cd /etc/httpd/conf.d/
# cp -p subversion.conf subversion.conf.orig
# vi subversion.conf

输入以下内容:
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
Alias /svn "/home/svnrepo"
<Location /svn>
    DAV svn
    SVNParentPath /home/svnrepo
    AuthType Digest
    AuthName "Subversion Area"
    AuthUserFile /home/svnrepo/.htdigest
    Require valid-user
</Location>

重启 Apache。
# /etc/init.d/httpd configtest
# /etc/init.d/httpd restart

老系统(Redhat AS3)下编译安装 Subversion 1.5.5

,

1. 下载

wget http://subversion.tigris.org/downloads/subversion-1.5.5.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-deps-1.5.5.tar.bz2

2. 编译安装

tar -zxvf subversion-1.5.5.tar.bz2
tar -zxvf subversion-deps-1.5.5.tar.bz2
cd subversion-1.5.5
./configure
make

报警:没有 Berkley DB

出错:
/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory
... ...


3. 安装 OpenSSL 最新版

wget http://www.openssl.org/source/openssl-0.9.8i.tar.gz
tar -zxvf openssl-0.9.8i.tar.gz
cd openssl-0.9.8i
make
make install

4. 安装 Berkley DB

下载 db-4.7.25.tar.gz (不能直接 wget,具体怎么做不再赘述)
tar -zxvf db-4.7.25.tar.gz
cd db-4.7.25
../dist/configure --prefix=/usr/local/berkeley-db --enable-compat185
make
make install

5. 排错

经查证,文件 krb5.h 在 /usr/kerberos/include/ 下面,网上有介绍说在 Makefile 里面加上这个路径就可以,于是在 Makefile 中追加:
-I//usr/kerberos/include
再次编译,仍然出错。

最后只有用文件链接的土办法来解决:
ln -s /usr/kerberos/include/krb5.h /usr/include/krb5.h
ln -s /usr/kerberos/include/profile.h /usr/include/profile.h
ln -s /usr/kerberos/include/com_err.h /usr/include/com_err.h

重新配置和编译
./configure --with-ssl --with-berkeley-db=/usr/local/berkeley-db
make

还是出错,说是找不到 libdb-4.1.la 和 libexpat.la。
上网找解决办法,说是加 --disable-shared 即可解决。

6. 再次编译安装

cd subversion-1.5.5
./configure --with-ssl --with-berkeley-db=/usr/local/berkeley-db --disable-shared
make
make install

忙活半天,终于装上。
为了给后人省时间,记录一下安装过程。

Ubuntu 下 Subversion 安装简记

, ,

以下是我在Ubuntu下Subversion的安装记录。

软件安装

若系统尚未安装Apache,建议先安装Apache,最好是Apache2

$ apt-get install apache2

之后安装Subversion以及Apache2模块

$ apt-get install subversion libapache2-svn

创建用户组

$ groupadd subversion
$ usermod -G subversion myuser


新建版本库

$ mkdir /home/svn
$ chown -R www-data:subversion /home/svn
$ chmod -R g+rs /home/svn
$ svnadmin create /home/svn/myproject
$ chmod -R g+rw myproject


项目文件准备

建立将要导入到版本库的文件与目录,包括三个顶级子目录,分别是branches、tags和trunk:

/tmp/myproject/branches/
/tmp/myproject/tags/
/tmp/myproject/trunk/


项目文件放在 /tmp/myproject/trunk/ 以下。

项目文件导入

$ svn import /tmp/myproject file:///home/svn/myproject -m "initial import"

项目文件导出测试(file方式)

$ cd /home/myuser
$ svn checkout file:///home/svn/myproject/trunk myproject1


版本更新测试

$ cd /home/myuser/myproject1

追加文件
$ echo '这是一个新文件' > newfile
$ svn add newfile
$ svn commit


删除文件
$ svn delete newfile
$ svn commit


以上步骤,若无问题,表明Subversion已经初步安装设置成功。

接下来是和Apache结合的Subversion配置步骤。

修改httpd.conf

$ vi /etc/apache2/httpd.conf

追加以下内容:
# SVN Repository
<Location /svn>
        DAV svn
        SVNParentPath /home/svn
</Location>


重启动Apache

$ /etc/init.d/apache2 restart

通过Web访问svn测试

用浏览器访问以下地址:
http://localhost/svn/myproject
http://localhost/svn/myproject/trunk/

若能正常访问,即OK。

项目文件导出测试(http方式)

$ cd /home/myuser
$ svn checkout http://localhost/svn/myproject/trunk/ myproject2


版本更新测试

$ cd /home/myuser/myproject2

追加文件
$ echo '这是一个新文件' > newfile
$ svn add newfile
$ svn commit


删除文件
$ svn delete newfile
$ svn commit


以上步骤,若无问题,表明通过Web访问控制的Subversion已经设置成功。

以上安装设置尚未考虑用户权限,具体设置请参考Subversion的官方文档
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31