2009-09-19 11 views
5

私はMercurialを使ってDrupalプロジェクトのソースファイルをバージョン管理し始めました(私はVCSとMercurial初心者です)。ただし、データベースは、日付が付いた.sql.gzファイルのディレクトリを使用して、まだ "バージョン管理"されています。Mercurialフックを使ってバージョン管理用のデータベースダンプを作成/ロード

私が望むのは、データベースの変更時に現在のダンプで上書きされ、別のバージョンにロールバックするときにデータベースにインポートされる、自分のリポジトリ内のどこかに単一のデータベースダンプファイルがあることです。

私は手動で行いました。しかし、私が本当に好きなのは、コミット/アップデートごとにダンピング/ロードを自動的に行うものです。 TortoiseHgのツールで作業するのが好きなので、最初にデータベースをダンプしてからコミットするmakefileのような外部のものよりも、Mercurialのほうが好きです。別のスクリプトを実行する気がしません。

フックにmysql .... < dumpfile.sqlのようなものがあると、アップデート後にデータベースダンプをロードする簡単な方法になります。しかし、自動ダンピングはどうですか?

SVNのプリコミットフックについてsimilar questionがありました。これはおそらく悪い考えです。それはMercurialにも適用されますか?多分別のフック(prechangegroup?)が動作するでしょうか?

EDIT:

私は、私は私のローカルマシン上で、自分でそれを使用していることを指摘しなければなりません。単一のユーザーを超えて拡張するべきではありません。

答えて

5

pre-commitフックでデータベースをダンプすると問題はありません。 precommitフックを使用しないように注意してください。これは、トランザクション内で実行されるためです。

一般に、コマンドごとに(updatecommitなど)、コマンドが実行される前にpre-<command>フックが実行されます。

+0

素晴らしい!これはhgを使ってうまく動作します。しかし、もし私がtortoisehgを使用すると、私は2度コミットする必要があります(ソースファイル用に1回、新たに作成されたデータベースダンプ用に1回)...それを回避する方法を知っていますか? –

+0

THGは、ファイルが変更されたと思われるファイルに制限することを意味します。私はそれを回避するために十分にTHGを知らない(多分THGのメーリングリストで尋ねる)。とにかくありがとう。 – tonfa

+0

ほとんどの場合、私はコミットのためにコマンドラインを使うことができます。そう悪くはない。 –

1

更新操作のほうが多いようです。私はあなたがデータベースで作業していて、意図的にSQLスキーマをエクスポートすることを選択し、コミットしていると仮定します。この問題は、他の人があなた(または他の場所)から更新したり、更新したりするときに発生します。 Mercurialはhook for updates.

実際にデータベース(mysql)と話す可能性のある独自のmercurialプラグイン/拡張機能を作成し、より有益な情報を提供する可能性があります。これはすべてあなたが少しのPythonを知っているかどうかにかかっています。

+0

シンプルなシングル開発者セットアップだと付け加えておきます。誰も私から更新していないか、またはその逆(私は今それを追加しました)。また、私は更新プログラムのダンプをインポートしたいと思いますが、コミットのEXPORTダンプもありますが、難しさがあります(私は思っていますか?)。 水銀プラグイン/エクステンションについて - 私はいくつかのPythonを知っていますが(MercurialのAPIはありません)。 mysqldump/mysqlはどうしたらいいのですか? –