2012-09-12 47 views
8

我使用git從版本控制mysql數據庫轉儲。git可以忽略匹配模式的特定行嗎?

使用--skip-extended-insert,因此每條記錄都在它自己的行上,它可以很好地跟蹤更改。它還允許我從歷史記錄中提取舊版數據庫並導入它們。

有沒有辦法讓git忽略某些包含特定模式的行或行?

回答

6

沒有

Git是基於文件的,也不會修改跟蹤的文件的內容導出的diff。

可能的替代

刪除冗餘代碼

不包括表/ db數據轉儲,你不關心。如果沒有創建差異,則不需要採取額外的步驟來忽略/更正它。

所以,如果例如,問題被刪除,你不想備份,從備份過程中刪除這些文章:

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

後處理

後處理數據庫轉儲清除你不關心的事情。作爲一個例子,這裏是從一個數據庫轉儲助手腳本我用的摘錄:

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

(僅用於說明)本示例中刪除自動增量值創建表的語句,以便它們不會產生所控制的(版本差異)schema.sql文件。

1

如果混帳不能做到這一點,這兩個解決方案,我看到的是:

  1. 修改我用轉儲數據庫刪除的東西都無關版本控制腳本。 (缺點:刪除一些這些東西可能會導致轉儲不再可用於導入)

  2. 將每個數據庫轉儲存儲在其他地方(可能以某種方式由commitID命名)和版本控制修改版本。 例如,cat dump.sql | grep -v "_session" >> dump.sql, 但如果我可以添加一個像這樣的grep在某個地方進行連接,那將是理想的選擇。

相關問題