我需要忽略一些文件中的一些行,这些文件在生成这些文件时包含时间戳。有时我们会生成这些文件,但文件中唯一的变化是我们不关心的时间戳,并且该文件不应该被 git status 提交。
我知道我可以使用 git 过滤器,就像这个主题一样:如何告诉 git 忽略单独的行,即 gitignore 对于特定的代码行
但在这种情况下,当我执行 git add 时,它会删除行。如果文件中存在除时间戳之外的其他更改(时间戳行将被忽略),我希望提交这些行。但如果更改只是时间戳行,我不希望提交文件。
我如何使用 git 过滤器做到这一点?
谢谢
在查找差异时使用文本转换来排除噪音,然后您可以仅添加您关心的更改的文件。git add
不会自动运行差异来检测更改,它经常执行并且需要快速,但编写脚本很容易。
在您对特定差异感兴趣(不)感兴趣的文件上设置自定义diff
属性值,配置该差异的文本转换,运行差异以检测具有您关心的更改的文件,然后添加这些文件。
Saysed 's,^#Timestamp:.*',#Timestamp:<whatever>,'
将使所有时间戳行相同,因此如果您在检查差异之前对内容运行该操作,时间戳更改将不会显示,即使它们存在于文件中。
放
*.xyz diff=notimestamp
Run Code Online (Sandbox Code Playgroud)
在属性文件中,对于诸如初始测试之类的存储库本地工作来说,这.git/info/attributes
是正确的位置。
notimestamp
然后在中配置diff 预处理.git/config
:
[diff "notimestamp"]
textconv = "sed 's,^#Timestamp:.*,#Timestamp:<whatever>,'"
Run Code Online (Sandbox Code Playgroud)
现在,每当 git 对文件运行完整的 diff 时,*.xyz
它都不会看到时间戳更改。所以你可以
git diff | sed -n '/^diff/s,.* b/,,p'
Run Code Online (Sandbox Code Playgroud)
查看包含您确实关心的更改的文件列表,然后添加这些文件(例如,您可以将 diff 标头替换为而git add
不是什么都替换,然后只运行生成的命令)。
归档时间: |
|
查看次数: |
1158 次 |
最近记录: |