9

git を使用して、Web サイトからの mysql データベース ダンプのバージョン管理を行っています。

--skip-extended-insert を使用すると、各レコードが独自の行に表示されるため、変更を追跡するのに非常にうまく機能します。また、履歴から古いバージョンのデータベースを取得してインポートすることもできます。

特定の行または特定のパターンを含む行を無視するように git に指示する方法はありますか?

4

2 に答える 2

8

いいえ

Git はファイル ベースであり、追跡されたファイルの内容を変更して差分を取得することはありません。

可能な代替案

クラフトを取り除く

気にしないデータベースダンプにテーブル/データを含めないでください。違いが生じていない場合は、それを無視/修正するために追加の手順を実行する必要はありません。

たとえば、バックアップしたくない記事が削除されていることが問題である場合は、それらをバックアップ プロセスから削除します。

mysqldump -c -w "articles.deleted IS NULL" articles > backup.sql 

後処理

データベース ダンプを後処理して、不要なものを削除します。例として、私が使用している db dump ヘルパー スクリプトからの抜粋を次に示します。

#!/bin/bash
mysqldump -dRC --skip-dump-date --skip-add-drop-table --default-character-set=utf8 database $@ > schema.sql
sed -i 's/ AUTO_INCREMENT=[0-9]\+//' schema.sql

この例 (説明のみ) では、create table ステートメントから autoincrement 値を削除して、(バージョン管理された) schema.sql ファイルに違いが生じないようにしています。

于 2012-09-12T08:00:06.393 に答える
1

git がこれを実行できない場合、私が見る 2 つの解決策は次のとおりです。

  1. データベースのダンプに使用するスクリプトを変更して、バージョン管理に関係のないものを削除します。(欠点: これらのいくつかを削除すると、ダンプがインポートできなくなる可能性があります)

  2. 各データベース ダンプを別の場所に保存し (おそらくフック内で commitID によって名前が付けられます)、変更されたバージョンをバージョン管理します。などですcat dump.sql | grep -v "_session" >> dump.sqlが、このような grep をどこかの git に追加できれば理想的です。

于 2012-09-12T06:53:13.090 に答える