2010-12-01 13 views
0

WindowsマシンでSVNリポジトリを実行しています。コミットされたファイルをリモートWebサーバーにアップロードするスクリプトが必要です。私はプリコミットフックについて読んだことがありますが、実際にスクリプトを書く方法や、どの言語で書かなければならないのか分かりません。スクリプトのように見えるのは、実行する.batまたは.exeである必要があります窓でSVN Windowsでの事前コミットフックFTPアップロード

誰かがWindowsマシンで実行するスクリプトを持っていますか?私はサイト全体をアップロードするつもりはないが、個々のファイルはコミットされている。 ftpのアップロードが失敗した場合にユーザからのフィードバックを得ることができるので、私はプリコミットフックが必要です。

これまでやったことがある場合は、プロセス全体をnewbに説明してください。

答えて

1

私はポストコミットフックが必要だと思います。

svnフックは実際には実行ファイルまたはスクリプトファイルです。 Look here for some samples

Windowsでは、組み込みコマンドラインftpクライアントを使用できます。 1つの方法は、バッチファイルから生成できるテキストファイルにFTPコマンドを入れることです。例:

echo [username]>ftp.txt 
echo [password]>>ftp.txt 
echo put [filename]>>ftp.txt 
echo quit>>ftp.txt 

ftp -s:ftp.txt [server] 

はもちろん、あなたも(FtpWebRequestクラスを使用して、例えば.NETで)これを行うためのプログラムを書くことができますが、それはバッチスクリプトである必要はありません。

+0

いいえ、私は事前コミットが必要です。さもなければ、FTPのアップロードは失敗しますがコミットされ、私はうんざりです。 – Liquidgraph

+0

これらのサンプルはFTPアップロードに関するものではありません。また、フックスクリプトを使用してWindowsでビルドインコマンドラインftpクライアントを使用する方法を詳しく説明できますか? – Liquidgraph

+2

あなたが最後に望むことは、プレコミットフックです。事前コミットフックは、ユーザーの問題にのみ使用する必要があります。このようにして、ユーザーは問題を訂正して再試行することができます。 FTPサーバーに問題があります。 –

3

何らかの理由でコミットに失敗する場合は、事前コミットフックが使用されます。 FTPサイトがダウンした、またはディスクがいっぱいだったために本当にコミットに失敗したいですか?

必要なプロパティなどが不足しているファイルなど、開発者が管理しているもので失敗する場合にのみ、事前コミットスクリプトを使用する必要があります。これにより、開発者は問題を修正してからコミットを再送信できます。

コミット後のスクリプトは、ユーザーの端末が完了するのを待っているにも関わらず、スクリプトが失敗して何かが失敗したとユーザーに通知しますが、とにかくコミットが発生します。あなたがフックでこれをしたいならば、あなたはpre-commitフックではなく、ポスト・コミット・フックでそれを行うべきです。


あなたがしたいことについて、フックは良い方法ではありません。ユーザーがたくさんのファイルをコミットするとどうなりますか?あなたのフックスクリプトが実行されている間、彼らは10分ほどそこに座っていなければなりませんか?

より良い考え方は、Hudsonのような連続的なビルドシステムを使用することです。 HudsonはSubversionリポジトリを監視し、ユーザがコミットするたびに必要なFTPタスクを実行できます。ハドソンでは、開発者がフックを完了するのを待っている間に開発者を縛りつけているわけではなく、すべてのコミットで何が起きたのかを完全に記録しています。

実際、すべてのサイトで連続ビルドサーバーを使用する必要があります。 コードをにコンパイルしなくても、すべてのコミットに対してテストを実行します。

ハドソンにはFTPとSFTPプラグインがあり、タスクを簡単にすることができます。ハドソンではビルド前とビルド後のスクリプトを呼び出すことができるので、あなたの心が欲しいものはほとんど何でも自由に処理できます。

ハドソンは、WindowsサーバとUnixサーバで動作します。これはJavaプロセスです。


あなたがWindows上だし、あなたがPowerShellのを持っていない場合、あなたには、いくつかのスクリプト言語にあなたをダウンロードして、あなたのフックを書くためにそれを使用する必要があります。 Windowsのcommand.exeプロセッサーの標準バッチプログラミング言語はあまり柔軟ではありません。フックはサーバー上で実行されるため、フックが1台のマシンで実行されるかどうかを心配するだけです。いくつかのプログラムはクライアント側のフックを使用し、フックを書く場合、クライアントが使用する可能性があるすべての単一システムで実行できる必要があります。

+0

私はこの一日をこのトピックを研究するのに費やしており、コンセンサスは次のように思われます。 – Liquidgraph

+0

私は基本的に、開発者がコミットするたびにステージングサーバーにアップロードされる、ハドソンが言ったことをセットアップしようとしています。彼が複数のファイルをコミットしている場合でも、1つのコミットとしてカウントされますか?なぜそれがあなたを遅らせるだろうか? – Liquidgraph

+0

私は@David W.に同意します。これは、あなたがしようとしていることを実装するための奇妙な方法と思われます... – jeroenh

関連する問題