0

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

我的 SVN 存储库位于:/media/disk3/velsvn/projects
我的结帐文件夹位于:/media/disk2/www/htdocs


(参考:使用 SVN post-commit hook 仅更新已提​​交的文件

我的提交后文件如下所示:

#!/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]/format 不是文件或不退出.)

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


任何人都可以在这方面帮助我。我浪费了 2 天的时间来解决这个问题,但没有找到任何解决方案。

问候,

尼丁

4

1 回答 1

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 以便它们可以被执行。

请随时评论这篇文章并提供更好看的解决方案。我现在所知道的是,这个解决方案有效:)

于 2011-08-17T06:48:34.907 回答