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