自定义筛选器以区分两个文件何时相等



在我的存储库中,我有一些json文件要添加到git中。这些json由以下部分组成:一些字段,它们每天都会随着时间戳的变化而变化,即最新的时间戳,以及一个"内容"字段,它是json的真实内容。

我想告诉git,如果json在内容字段中更新,则必须将其视为"已修改",否则即使其他字段发生了更改,也必须将其显示为"最新"。

我读过gitattributes,创建了一个过滤程序textconv,它只输出要比较的内容字段。它适用于"diff"命令,但"git-status"仍然将其视为"已修改"。

如何做到这一点?

git status将看到一个文件在发生任何更改时被修改,即使这些更改与您无关。这是因为这种算法很便宜,而且很容易从文件系统元数据中计算,而你提出的算法需要每次读取整个文件,如果文件很大或有很多文件,这是非常昂贵的。

可以使用smoot/clean过滤器(请参阅gitattributes(5)手册页(,该过滤器将在clean时从JSON中删除除content字段之外的所有字段,并在smooth上添加这些额外字段。但是,如果您这样做,即使文件发生了更改,git status仍然会将其视为已修改,即使是以某种方式将其清理为相同的内容。您需要执行git add操作,使文件不再显示为已修改。

最新更新