git 按规则忽略对文件的指定类型更改

git ignore a specified type of change to file by rule

我有一个存储库,其中包含第三方可执行文件 运行 时生成的文件。我需要跟踪此可执行文件生成的文件,以允许我在用户之间同步可执行文件设置。

让我们称这个文件为“executable_settings.json”

文件可以通过两种方式更改:

  1. 需要添加到存储库的设置更改
  2. 每次可执行文件 运行 时都会生成 运行 时间更改,并以正则表达式可以捕获的指定方式更改文件(例如“编辑时间:XXXX- YY-ZZ”)。我不希望这些更改出现在回购协议中。

有没有办法让 git 根据规则自动忽略对 executbale_settings.json 的更改?我想找到一种方法,使类型 2 的更改不会显示为对 git 的更改,除非同时也有类型 1 的更改。

这里最好的方法是使用污迹清洁过滤器。 gitattributes(7) 文档中概述了这些内容,但总而言之,如果您在 .gitattributes 中编写一个条目,如下所示:

executable_settings.json  filter=exec-settings

然后将以下内容添加到您的配置中:

[filter "exec-settings"]
    clean = sed -e '/Edited On:/d'

然后当您使用git add将文件添加到Git时,它会删除所有包含“Edited On”的行。请注意,这不会本质上阻止它们被 git status 标记为已修改,但会阻止这些行被签入。

请注意,您可以使用不同的命令(例如 jq 或脚本)来过滤掉不需要的条目。一旦您对过滤器感到满意,您应该添加 .gitattributes、运行 git add --renormalize . 来修复存储库中的文件,然后提交。

我应该指出,这通常是您的系统本地的。无法将此配置包含在存储库中以使其自动调用。这是因为这样做会允许任意代码执行。但是,您可以将安装脚本添加到您的存储库,将此配置作为项目的一部分在本地安装。