我正在使用自动生成大量C代码的工具。该工具在每次运行时为一批.c和.h文件生成代码。由于某种原因,该工具不够智能,无法识别文件何时没有实质性更改,因此在许多情况下,它只是更新每个文件顶部注释中的时间戳。否则,文件将保持不变。
在那种情况下运行git status
时,有时会看到数十个或数百个文件已更改。但是,当我查看单个文件的更改时,它们中的大多数并没有真正的更改-只是时间戳的更新。我必须一个接一个地浏览每个文件,以确定是否有任何实际更改要提交。
有没有一种方法可以配置Git,以便它可以忽略无关紧要的更改,例如标题注释中的时间戳?否则我将如何处理这种情况?
感谢您的帮助。
答案 0 :(得分:3)
有没有一种方法可以配置Git,以便它可以忽略无关紧要的更改,例如标题注释中的时间戳?否则我将如何处理这种情况?
是;这是过滤器的目的。
您可能已经熟悉git的“干净”和“涂抹”过滤器概念,这就是它处理行尾转换的方式。如果您使用Windows计算机,并且在工作目录中具有Windows样式的行尾,则可以设置.gitattribute
之类的* text=auto
来表示您希望文件以“规范化”的Unix样式检入到存储库中行尾。在这种情况下,文件将应用“干净”过滤器,以将\r\n
行尾转换为\n
样式行尾。同样,文件将在结帐时“弄脏”,以从磁盘上的\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包含创建您自己的过滤器的更详细的示例。
答案 1 :(得分:0)
我发现了一种使用Beyond Compare解决小变化的方法。我将描述与忽略自动生成的C文件中的时间戳更新有关的过程,但是可以很容易地将其适应于其他情况和语言:
git difftool --dir-diff --no-symlinks
命令添加一个Git别名(例如dtd
)。git dtd
进行目录差异。 “超越比较”将打开,并向您显示更改之前/之后的文件夹比较。* Generation Time:
开头,则将其输入“文本自”框中。选中“在行尾停止”复选框。git dtd
命令再次将其重新打开。参考:https://www.scootersoftware.com/support.php?zz=kb_unimportantv3