私のSVNリポジトリは私のサーバに設定されており、コミット後の問題があります。私は自分のiMacでクライアントとしてSmartSVNを使用しています。私はSmartSVNからssh + svnを介して接続します。私は正常にSVNに接続して変更を加えることができましたが、自分のSVNクライアントからコミットした後のコミット後スクリプトは機能しません。SVN post-commitフックはコミット後に実行されません
post-commit.sh
というコミット後のシェルスクリプトを作成し、それを機能させるためにこれがあなたがしなければならなかったことだと思ってフックディレクトリに入れました。基本的にスクリプトが行うのは、一時的なワークスペースへの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のマニュアルとインターネット上で、多くの成功なしに修正プログラムを見てきました。
スクリプトの呼び出し時に発生するエラーをログファイルで確認することをお勧めします。だから私のポストコミットスクリプトは上記のコマンドを持つ別のファイルを呼び出し、コマンドラインを出力してsvna.log
というファイルに戻ります。 post-commit.sh
ファイルは次のようになります。
cd /home/modionzc/hooktest/
/home/modionzc/hooktest/ac_post_commit.sh &> svna.log
ここで、ac_post_commit.shには上記の元のコードがあります。 再度手動で呼び出すと、すべての応答が必要に応じてファイルに送られますが、SmartSVNから作業をコミットすると、ログファイルは実際には空です。
FYI - 何らかの理由で、私のpostcommit.shの末尾に*
があり、hooksディレクトリのファイルがあるとpostcommit.sh *としてリストされます。
お願いします。ありがとうございました。
'post-commit.sh'の名前を' post-commit'に変更するとどうなりますか? – Wrikken
あなたの 'ls'コマンドはおそらく' ls -CF'のようなエイリアスになっているので、ディレクトリリストの 'post-commit.sh'の終わりに' * 'があります。 '-F'オプションは' ls'に実行可能ファイルに '*'、 '/'でディレクトリをマークするよう指示します。 –