8

Git リポジトリに Sqlite db があります。今日は、2 つの異なるコミットでビューの差分を取りたいと思いました。私はこのようにしました:

$ sqlite3 -list file.sqlite "SELECT * FROM contact_list_detailed" >/tmp/newlist
$ git checkout 51c24d13c file.sqlite
$ sqlite3 -list file.sqlite "SELECT * FROM contact_list_detailed" >/tmp/oldlist
$ git checkout -- file.sqlite
$ diff /tmp/oldlist /tmp/newlist

それは機能し、必要に応じてスクリプトを作成できます。しかし、フックを使ってこれを行う「良い」方法はありますか?

4

3 に答える 3

26

git のtextconv機能を使用して、sqlite ファイルのバージョン間の差分を表示する方法を次に示します。ダンプを行うだけなので、大規模なデータベースではあまり効率的ではない場合があります。フックは必要ありません。

そのリンクはもう利用できないようなので、代わりにアーカイブ バージョンを使用しています。

その要点は、git 属性ファイル ( .gitattributes、または.git/info/attributes) で、パターン マッチを追加して sqlite3 diff を強制することです (データベース ファイルの拡張子が であると仮定します.sqlite3)。

*.sqlite3 diff=sqlite3

次に、git 構成ファイル (~/.gitconfigまたは.git/config) で:

[diff "sqlite3"]
    binary = true
    textconv = "echo .dump | sqlite3"

スキーマの変更を追跡するだけの場合は、.schema代わりに.dump.

于 2014-02-14T20:42:56.980 に答える
4

以前のリビジョンと現在のリビジョンにアクセスするには、HEADandを使用します。HEAD^例については、git post-commit hook - コミットされたファイルのスクリプトを参照してください。

git show作業コピーを上書きせずに一時ディレクトリにファイルを抽出するために使用します。


git絶対に必要でない限り、バイナリファイルを保存しません。で SQL コマンドのテキスト ファイルを作成し、それsqlite3 file.sqlite .dumpを git に入れ、バイナリ データベースを生成されたファイルとしてのみ持つと、多くの手間を省くことができます。(ただし、必要に応じて SQL ファイルを再生成する必要があります。)

于 2012-11-07T16:18:28.223 に答える