0

私のSVNサイズは20GBなので、変更されたファイルを更新したいです。

私の SVN リポジトリは次の場所にあります: /media/disk3/velsvn/projects
私のチェックアウト フォルダは次の場所にあります: /media/disk2/www/htdocs


(参考:SVN post-commit フックを使ってコミット済みのファイルだけを更新する

コミット後のファイルは次のようになります。

#!/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 is not a file or does not exit と言いました。 .)

このファイルを実行しようとすると、次のエラーが発生します -
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 に接続してシェル スクリプトを実行するためのパスワードを入力するのをシステムが待機しなくなります。2. POST-COMMIT ファイルとシェル ファイル sh1 および sh2 には、実行できるように +x mod が与えられました。

この投稿にコメントして、より見栄えの良いソリューションを提供してください。私が今知っているのは、このソリューションが機能することだけです:)

于 2011-08-17T06:48:34.907 に答える