4

サーバーにSVNリポジトリを設定していて、コミット後の問題が発生しています。iMacのクライアントとしてSmartSVNを使用しています。SmartSVNからssh+svnを介して接続します。SVNに正常に接続して変更を加えることはできますが、SVNクライアントからコミットした後、コミット後のスクリプトが機能しません。

名前を付けたコミット後のシェルスクリプトを作成し、post-commit.shそれを機能させるために必要なのはこれだけだと考えて、hooksディレクトリに配置しました。基本的に、スクリプトが行うことは、一時的なワークスペースへのSVNチェックアウトであり、次に必要なファイルをサーバー上の開発サブドメインにアップロードします。これは、ユーザーがWebアプリケーションに対して行ったすべての変更をテストする環境を確保するためです。ファイルは元々このように見えました。

rm -rf /home/modionzc/tempworkspace/artistcondevspace/*
cd /home/modionzc/tempworkspace/artistcondevspace
svn checkout file:///home/modionzc/svnrepos/artistcondevrep
rm -rf /home/modionzc/public_html/devsuper/application/*
rm -rf /home/modionzc/public_html/devsuper/css/*
rm -rf /home/modionzc/public_html/devsuper/js/*
rm -rf /home/modionzc/public_html/devsuper/images/*
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/application/* /home/modionzc/public_html/devsuper/application/
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/css/* /home/modionzc/public_html/devsuper/css/
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/js/* /home/modionzc/public_html/devsuper/js/
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/images/* /home/modionzc/public_html/devsuper/images/
cp /home/modionzc/artistconconfig/appconfigfiles/config.php /home/modionzc/public_html/devsuper/application/config/config.php
cp /home/modionzc/artistconconfig/appconfigfiles/database.php /home/modionzc/public_html/devsuper/application/config/database.php
cd /home/modionzc/public_html/devsuper
chmod -R 755 *
chmod 644 $(find *.* ! -type d)

コマンドラインから手動で実行し、必要なファイルを更新すると、完全に正常に実行されます。なんらかの理由で、SmartSVNからコミットするたびに呼び出されません。変更はリポジトリを介して行われ、スクリプトを手動で実行すると、更新が実際に行われたことがわかります。調査を行ったところ、許可の問題である可能性があるか、絶対パスを使用していないことがわかりました。スクリプト全体で絶対パスを使用しています。ファイルへのアクセス許可は755に設定されています。私が考えることができる唯一のことは、実際のSVNユーザーには、confファイルで作成されたユーザーであるアクセス許可がないということです。私はSVNマニュアルとインターネットを調べて修正を探しましたが、あまり成功しませんでした。

1つの提案は、スクリプトが呼び出されたときに発生するエラーを確認するためにログファイルを作成することでした。したがって、コミット後のスクリプトは、上記のコマンドを含む別のファイルを呼び出し、コマンドラインを出力して。というファイルに戻りますsvna.log。ファイルは次のpost-commit.shようになります。

cd /home/modionzc/hooktest/
/home/modionzc/hooktest/ac_post_commit.sh &> svna.log

ac_post_commit.shに上記の元のコードがある場合。繰り返しますが、手動で呼び出すと、必要に応じてすべての応答がファイルに送られますが、SmartSVNから作業をコミットすると、ログファイルは実際には空になります。

参考までに-何らかの理由で、私のpost-commit.sh*の最後にがあり、hooksディレクトリにファイルを置くとpost-commit.sh*としてリストされます。

どうか、これに関する助けをいただければ幸いです。

4

2 に答える 2

6

他の人の投稿を見ているときにsvnフォーラムで問題が発生していることがわかりましたhttp://www.svnforum.org/threads/40951-How-repository-hooks-works?highlight=post-commit。問題は、コミット後のファイルの末尾に.shを追加できないという事実にあります。「post-commit」という名前を付ける必要があります。これには、上記のMensiによって言及されたが、スクリプトの問題ではなかった、最初の行に記述しているスクリプトのタイプへのパスが必要です。とにかくあなたの助けをありがとう。

于 2012-04-05T23:19:07.960 に答える
0

最初に#!/ bin / shが欠落している可能性がありますか?

于 2012-04-05T16:42:39.263 に答える