我想更新已更改的文件,因为我的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天的工作,但没有找到任何解决方案。
问候,
尼丁
答案 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,以便它们可以执行。
请随时对此帖发表评论,并提供更好看的解决方案。我现在所知道的是,这个解决方案有效:)