gpt4 book ai didi

git - 如何在差异期间使用 git filter.gitignore.clean 过滤两个分支

转载 作者:太空狗 更新时间:2023-10-29 13:26:33 31 4
gpt4 key购买 nike

情况

我正在将 htm 文件放入 git。然后我使用 git diff 来比较它们。我不感兴趣的文件之间存在差异,例如 meta 或 comments 标签。

我通常使用这种方法:How to tell git to ignore individual lines, i.e. gitignore for specific lines of code

到目前为止我做了什么

以下是我采取的步骤:

  1. <project root>/.gitattributes 中创建了 gitattributes 文件
  2. 添加了一行定义要过滤的文件:
    • *.htm filter=gitignore ,即对所有 .htm 文件运行过滤器 gitignore
  3. 在我的 gitconfig 中定义过滤器:
    • $ git config --global filter.gitignore.clean "sed 's/<meta.*>//g'" ,即删除这些行
    • $ git config --global filter.gitignore.smudge cat ,即做从 repo 中提取文件时没有任何内容
  4. 然后我对任意文件进行比较:git diff A..B -- file.htm > diff.txt

根据我当前所在的分支,我得到不同的结果:

  • 在分支 A 上,我仍然看到分支 B 的所有元标记,它们显示为添加。
  • 在分支 B 上,我仍然看到分支 A 的所有元标记,它们显示为删除。

问题

我怎样才能做到无论我在哪个分支上,所有分支都应用该过滤器?

最佳答案

这些过滤器不关心你所在的分支。同样,git diff A..B -- file.htm 将不依赖于当前分支,因为您直接通过分支头(提交)A 和 B 指定 git 存储库树。

引用 man git-config

filter.<driver>.clean: The command which is used to convert the content of a worktree file to a blob upon checkin.

filter.<driver>.smudge: The command which is used to convert the content of a blob object to a worktree file upon checkout.

因此您的 sed 脚本仅在您“向 git 添加文件”时运行。它不会改变现有的提交,也不应该影响它们之间的差异。看起来元标记仍然存在于您的分支机构 B 的文件中,因为它们是在您配置过滤器之前添加的。

如果您仍然可以修改分支 B,您可以在备份后尝试以下操作。

find . -name \*.htm -exec rm {}
git checkout B
git reset --hard

您的存储库现在应该显示要提交的元标记的删除。

关于git - 如何在差异期间使用 git filter.gitignore.clean 过滤两个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060004/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com