情况
我把htm文件放到git中.然后我使用git diff来比较它们.我不感兴趣的文件之间存在差异,例如meta或comments标签.
我通常使用这种方法:如何告诉git忽略单独的行,即特定行代码的gitignore
我到目前为止做了什么
以下是我采取的步骤:
<project root>/.gitattributes*.htm filter=gitignore,即在所有.htm文件上运行过滤器gitignore $ git config --global filter.gitignore.clean "sed 's/<meta.*>//g'",即删除这些行 $ git config --global filter.gitignore.smudge cat,即从repo中提取文件时什么也不做git diff A..B -- file.htm > diff.txt根据我目前所在的分支,我会得到不同的结果:
问题
我怎样才能做到这一点,无论我在哪个分支上,所有分支都应用过滤器?
小智 1
这些过滤器不关心您所在的分支。同样,git diff A..B -- file.htm不会依赖于当前分支,因为您直接通过分支头(提交)A 和 B 指定 git 存储库树。
引用man git-config
filter.<driver>.clean:用于在签入时将工作树文件的内容转换为 blob 的命令。
filter.<driver>.smudge:用于在检出时将 Blob 对象的内容转换为工作树文件的命令。
因此,您的 sed 脚本仅在您“将文件添加到 git”时运行。它不会改变现有的提交,也不应该影响它们之间的差异。看起来元标记仍然存在于分支 B 的文件中,因为它们是在您配置过滤器之前添加的。
如果您仍然可以修改分支 B,则可以在进行备份后尝试以下操作。
find . -name \*.htm -exec rm {}
git checkout B
git reset --hard
Run Code Online (Sandbox Code Playgroud)
您的存储库现在应该显示要提交的元标记的删除。