5

Drupalプロジェクトのソースファイルをバージョン管理するためにMercurialを使い始めました(私はVCSとMercurialの初心者の両方です)。ただし、データベースは、日付の付いた.sql.gzファイルのディレクトリを使用して「バージョン管理」されています。

必要なのは、リポジトリ内のどこかに単一のデータベースダンプファイルを作成することです。このファイルは、データベースが変更されると現在のダンプで上書きされ、別のバージョンにロールバックするときにデータベースにインポートされます。

私はそれを手動で行いました、そしてそれは働きました。しかし、私が本当に望んでいるのは、コミット/更新のたびに自動的にダンプ/ロードを行うものです。TortoiseHgのツールを使用するのが好きで、別のスクリプトを実行する気がないので、最初にデータベースをダンプしてからコミットするmakefileのような外部のものよりも、Mercurialにフックする方が本当に好きです。

mysql .... < dumpfile.sqlさて、フック上のようなものは、update更新のたびにデータベースダンプをロードする簡単な方法のようです。しかし、自動ダンプはどうですか?

SVNのpre-commitフックについても同様の質問があり、受け入れられた答えは、おそらくそれは悪い考えであるというものでした。Mercurialに適用されますか?たぶん別のフック(prechangegroup?)が機能するでしょうか?

編集:

私は自分のローカルマシンでそれを自分で使用していることを指摘する必要があります。シングルユーザーを超えて拡張することはできません。

4

2 に答える 2

5

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

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

于 2009-09-19T20:52:13.303 に答える
1

これは更新操作のようです。データベースで作業していて、意図的にSQLスキーマをエクスポートすることを選択し、コミットしたと思います。問題は、他の誰かがあなた (または他の場所) から更新した場合、またはあなたがそれらから更新した場合に発生します。Mercurial には更新用のフックがあります。

別の方法は、実際にデータベース (mysql) とディレクトリをやり取りして、より有用な情報を提供できる独自の mercurial プラグイン/拡張機能を作成することです。これはすべて、Python を少し知っているかどうかにかかっています。

于 2009-09-19T18:45:38.560 に答える