我使用git从网站控制mysql数据库转储。
使用--skip-extended-insert,所以每条记录都在它自己的行上,它可以很好地跟踪变化。它还允许我从历史记录中提取旧版本的数据库并导入它们。
有没有办法告诉git忽略某些包含某些模式的行或行?
答案 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不能这样做,我看到的两个解决方案是:
修改我用来转储数据库的脚本,以删除与版本控制无关的内容。 (缺点:删除其中一些东西可能导致转储不再适用于导入)
将每个数据库转储存储在其他位置(可能以某种方式在钩子中以commitID命名),版本控制修改后的版本。
如,cat dump.sql | grep -v "_session" >> dump.sql
,
但如果我可以在某个地方添加像这样的grep,那将是理想的。