我正在使用可自动生成大量C代码的工具。该工具在每次运行时为一批.c和.h文件生成代码。由于某种原因,该工具不够智能,无法识别文件何时没有实质性变化,因此在许多情况下,它只是更新每个文件顶部注释中的时间戳。否则,文件将保持不变。

在这种情况下运行git status时,有时会看到数十个或数百个文件已更改。但是,当我查看单个文件的更改时,它们中的大多数并没有真正的更改-只是时间戳的更新。我必须一个接一个地浏览每个文件,以确定是否有任何实际的更改要提交。

有没有一种方法可以配置Git,以便它可以忽略无关紧要的更改,例如标题注释中的时间戳?否则我将如何处理这种情况?

谢谢你的帮助。

最佳答案



是的;这就是过滤器的目的。

您可能已经熟悉git的“clean”和“smudge”过滤器概念,这就是它处理行尾转换的方式。当您在Windows计算机上并且在工作目录中具有Windows样式的行尾时,可以设置.gitattribute之类的* text=auto来指示您希望文件以“规范化”的Unix样式的行尾检入到存储库中。在这种情况下,文件将应用“干净”过滤器以将\r\n行尾转换为\n样式行尾。同样,文件将在 checkout 时被“弄脏”,以从磁盘上的\n转换为\r\n

您可以创建自己的清理过滤器,以便在工作目录和存储库之间转换时删除(或添加)数据。对于这些文件,您可以添加一个属性:

*.c filter=autogen

然后,您可以配置自动生成过滤器,并使用在“清理”(进入存储库)和“涂抹”(进入工作目录)方向运行的命令。
git config --global filter.autogen.clean remove_metadata
git config --global filter.autogen.smudge cat

(就过滤器而言,使用cat是“小事”)。

Pro Git book包含创建您自己的过滤器的更详细的示例。

关于c - 如何在自动生成的代码中配置Git忽略琐碎的更改(例如时间戳)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54713047/

10-10 00:30