2012-01-06 9 views
1

私はsvnlookを使って、変更/追加されたリポジトリのファイルのみを自動的に更新したいと思います。私は私のリポジトリにいくつかのアプリを持っていて、すべてがファイルを変更できました。 を実行しています。svnlookがpathtomyrepを変更しましたは私にファイルを与えます。どのように私はバッチファイル内のコミットフック内の変更されたファイルのみを更新するためにそれを使用するのですか?私はこのバッチファイル(post-commit.bat)を持っています:SVNフックとWindowsバッチスクリプト、何が間違っていますか?

Bute何も起こりません、コードは更新されません!私はファイルが一般的に動作することを知っています。ローカルでテストする代わりにUファイル名Uのみ取得します。どうしましたか?

感謝:)

+0

'for /?'は、 "デフォルトでは、/ Fは各ファイルの各行から最初に空白で区切られたトークンを渡します。" '/ F'に2番目のトークンを使用するように指示することができます。もしそれが常に2番目になることが保証できれば - 私はsvnlookの出力を覚えることができませんが、svnのアップデート出力に対して保証することはできません。 svnlookにステータス文字ではなくファイル名だけを返すことができますか? – Rup

+0

少なくとも* usebackqトークン= 2 *は私に名前を返します。私はそれを新しい方法で実行すると、svn updateはそのファイルをスキップしています...奇妙です。あなたは間違っているかもしれない何かを見ることができますか? – EOB

+0

私はそれを理解しました!私は完全な道を見つけた!そこで私は* SET MYPATH = d:\ apache \ htdocs *を追加し、これをsvnアップデートの前に追加しました! – EOB

答えて

1

は私が(使用svnlookへ)が唯一のように自動的に変更/追加されたリポジトリのこれらのファイルを更新したいです。

あなたは何をしたいのか明確ではありません。

  1. 開発者がSubversionリポジトリのファイルを変更したときに、その変更をウェブサイトに自動的に更新したいのですか?
  2. ディレクトリを見ていて、ファイルがそのディレクトリで変わったときに、それらの変更をSubversionリポジトリに保存したいのですか?

私は#2は、ポストコミットまたは事前commitフックスクリプトで行うことは不可能であるので、あなたが1位をしたいと仮定しています。コミット前/コミット後のフックスクリプトは、誰かがコミットしたときにのみ実行されるため、ディレクトリ自体を変更することはできません。

したがって、リポジトリにファイルがあり、それらのファイルを使用するサーバー上のディレクトリがあります。リポジトリに変更があった場合、プロセスがそれらのファイルを自動的に更新するようにします。これを処理する

、いくつかの方法:サーバーとファイルが含まれているマシンで

  1. 。ファイルを含むディレクトリがSubversionの作業ディレクトリであることを確認してください。 Subversion 1.7を使用している場合は、作業ディレクトリーのルートにあるのは.svnディレクトリだけなので、管理が簡単で簡単です。さて、あなたが必要とするのは、5分ごとに発射される予定の仕事(Unixの言葉ではcronjob)です。このタスクはすべて、その作業ディレクトリの更新を実行します。コミット後のフックは必要ありません。
  2. あなたのSubversionサーバに、コミット後のフックスクリプトからアクセス可能な作業ディレクトリを持つことができます。コミットが発生すると、コミット後のフックはその作業ディレクトリを更新し、rsyncを、これらのファイルがあるサーバ上のディレクトリに置き換えます。 rsyncは、変更されたファイルのみをコピーするため、ディレクトリの内容全体をコピーするよりも高速です。問題は、すべてのコミット後、コミットを行ったユーザは、コミット後のフックがその作業ディレクトリとrsyncを更新してから何か他のことをすることができるようになるまで待たなければならないということです。
  3. より良い方法は、Jenkinsのような継続的な統合ツールを使用して、コミット後のフックに頼るのではなく、誰かがコミットするたびに自動的に行うことです。ジェンキンスはすべてを記録し、問題があるかどうかを知らせます。

私の好みは#3、#1です。コミット後のフックを使うとSubversionが遅くなり、開発者を苛立たせることになります。ジェンキンスは簡単にセットアップして実行できます。彼らのサポートは素晴らしいですし、Subversionのように、それは無料のオープンソースツールです。

コミット後に自動的に更新を実行するために、これらのファイルを含むサーバーを自動的に持つようにJenkinsを設定できます。実際、セットアップは非常に簡単です。私は通常次のことをお勧めします:

  1. サーバーは、ディレクトリC:\fooを使用するように構成されています。
  2. コミットを更新すると、ディレクトリC:\barを作成し、svn exportを実行して、.svnディレクトリのない新しいクリーンディレクトリを作成します。
  3. svn export finishes, you rename C:\ bar to C:\ foo`の後。サーバーが新しいディレクトリを使用しています。

これは、ファイルが更新中にディレクトリを使用していないという利点があります。たとえば、filea.txtfileb.txtfilec.txtという3つのファイルがあるとします。変更はfileb.txtfilec.txtに行われます。これらの変更は一緒になって、同時に展開されないと(あなたが解雇されると)悲惨な結果が発生します。

アップデートプロセスのある時点で、filec.txtは古いバージョンになりますが、fileb.txtは新しいバージョンになります。確かに、更新が完了する前にサーバーでfileb.txtの新しいバージョンとfilec.txtという新しいバージョンの両方を使用することはほとんどありませんが、でそれに賭けたいですか?

だから、Subversionを遅くすることなく、あなたが望むことをするJenkinsを見てください。さらに、すべてのアクションをログに記録します。この方法で、どのファイルが変更されたか、更新が成功したかどうか、必要に応じて簡単に変更をロールバックできるかどうかを確認できます。さらに、サーバプロセスに特別な変更を加えたくない場合に、Jenkinsが一時的にアップデートを実行するのを一時的に停止する方が簡単です。

関連する問題