git可以忽略匹配模式的特定行吗?

时间:2012-09-12 06:37:36

标签: git

我使用git从网站控制mysql数据库转储。

使用--skip-extended-insert,所以每条记录都在它自己的行上,它可以很好地跟踪变化。它还允许我从历史记录中提取旧版本的数据库并导入它们。

有没有办法告诉git忽略某些包含某些模式的行或行?

2 个答案:

答案 0 :(得分:6)

Git是基于文件的,它不会修改跟踪文件的内容以导出差异。

可能的替代方案

删除残缺

不要在您不关心的数据库转储中包含表/数据。如果没有创建差异,则无需采取额外步骤来忽略/纠正它。

因此,例如,如果问题是您不想备份的文章,请将其从备份过程中删除:

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

后期处理

对数据库转储进行后处理以删除您不关心的内容。举个例子,这是我使用的db dump helper脚本的摘录:

#!/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语句中删除自动增量值,以便它们不会在(版本控制的)schema.sql文件中生成差异。

答案 1 :(得分:1)

如果git不能这样做,我看到的两个解决方案是:

  1. 修改我用来转储数据库的脚本,以删除与版本控制无关的内容。 (缺点:删除其中一些东西可能导致转储不再适用于导入)

  2. 将每个数据库转储存储在其他位置(可能以某种方式在钩子中以commitID命名),版本控制修改后的版本。 如,cat dump.sql | grep -v "_session" >> dump.sql, 但如果我可以在某个地方添加像这样的grep,那将是理想的。