发布提交挂钩问题

时间:2011-07-29 16:46:04

标签: svn post-commit post-commit-hook

我想更新已更改的文件,因为我的SVN大小为20GB。

我的SVN回购位于:/ media / disk3 / velsvn / projects
我的结帐文件夹位于:/ media / disk2 / www / htdocs


(参考:Using SVN post-commit hook to update only files that have been committed

我的提交后文件如下:

#!/bin/bash
REPOS="$1"  
REV="$2"  
cd /media/disk2/www/htdocs  
svnlook dirs-changed /media/disk3/velsvn/projects | xargs /usr/bin/svn up -N

(我使用的是REPOS和REV,但是他们给出了错误,所以我删除了它们。使用REV时,它曾经说REV没有定义。使用REPOS时,它常说[REPOS] /格式不是文件或不退出。)

尝试执行此文件时出现以下错误 -
跳过'PHP / htdocs / supporter' 跳过'PHP / htdocs / campus'


任何人都可以在这方面帮助我。我已经浪费了2天的工作,但没有找到任何解决方案。

问候,

尼丁

1 个答案:

答案 0 :(得分:0)

我可以通过更改程序来解决问题。在此处列出,因为它可能会帮助其他人。可能它不是一个完美的解决方案,但至少它是有效的。

POST_COMMIT

#!/bin/sh
wget http://localhost/update_svn.php

update_svn.php

<?php
$output = shell_exec('/media/disk3/velsvn/projects/hooks/svn_update_step1.sh');
echo "<pre>$output</pre>";
?>

<强> svn_update_step1.sh

ssh -i /media/d/mykey/id_rsa velsvnuser@localhost /media/disk3/velsvn/projects/hooks/svn_update_step2.sh

<强> svn_update_step2.sh

#!/bin/sh
cd /media/disk3/velsvn/projects/hooks
rm -f filelist
rm -f log
whoami >> log

    svnlook dirs-changed /media/disk3/velsvn/projects/  | sed "s/^..//" | awk '{ print substr( $0, 9 ) }' >> /media/disk3/velsvn/projects/hooks/filelist; sed -i -e 's#^#/media/disk2/www/htdocs#' filelist; cat /media/disk3/velsvn/projects/hooks/filelist | xargs /usr/bin/svn up -N >> /media/disk3/velsvn/projects/hooks/log

注意: 1. / media / d / mykey / id_rsa是为SSH访问生成的密钥。这可确保系统不会等待用户提供密码以连接到SVN以及执行shell脚本。 2. POST-COMMIT文件和shell文件sh1和sh2给出+ x mod,以便它们可以执行。

请随时对此帖发表评论,并提供更好看的解决方案。我现在所知道的是,这个解决方案有效:)