2012-04-05 76 views
4

私の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 *としてリストされます。

お願いします。ありがとうございました。

+0

'post-commit.sh'の名前を' post-commit'に変更するとどうなりますか? – Wrikken

+0

あなたの 'ls'コマンドはおそらく' ls -CF'のようなエイリアスになっているので、ディレクトリリストの 'post-commit.sh'の終わりに' * 'があります。 '-F'オプションは' ls'に実行可能ファイルに '*'、 '/'でディレクトリをマークするよう指示します。 –

答えて

5

他の人を見ながらsvnフォーラムの問題がここに投稿したのは、http://www.svnforum.org/threads/40951-How-repository-hooks-works?highlight=post-commitです。問題は、コミット後のファイルに、その末尾に.shを付けることができないという事実にあります。それはちょうど "ポストコミット"と呼ばれる必要があります。これには、上のMensiで言及された最初の行に書いているが、スクリプトの問題ではない種類のスクリプトへのパスが必要です。とにかく助けてくれてありがとう。

0

冒頭に#!/ bin/shがありませんか?

+0

これは全く機能しませんでした。とにかくそれはコメントではありません – Dom

+0

linuxにスクリプトを実行するときに使用するインタプリタを示します。[Shebang](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) – mensi

関連する問題