使用 git diff 提取有意义的更改
Extract meaningful changes with git diff
我正在尝试获取大量 HTML 文档的提交之间的更改,但我很快注意到大多数更改并不重要,通常是日志记录的结果,版本更改以防止缓存或外部脚本。例如:
<a class="support-ga" target="_blank" href="#">0fb63cacd50e / 0fb63cacd50e @
-app-151</a>
+app-107</a>
<input type='hidden' name='csrfmiddlewaretoken'
-value='82NB5DdySoICu1mqcl0RZVk5dMCOVEQd'
+value='a0zBgxBevaBugotGpNKI6kMPsIsBbH44'
/>
前面的示例表明查看这些更改可能不是很有趣或有用。
我想知道是否有 git diff 命令可以忽略这种变化。另一种选择是根据相似性对差异进行排名。到目前为止,我一直在使用 git diff --word-diff=porcelain --unified=0 HEAD~1 HEAD
命令,然后处理该输出以提取更改、计算 Levenshtein 距离并删除重复项。这有帮助,但考虑到 git 已经知道应该比较哪些行并提供可配置的行数作为上下文,这不是一个很好的解决方案。
您可以尝试编写一个差异驱动程序来忽略特定模式。
参见 this discussion as an example。
echo '*.html filter=ignore_value' >> .gitattributes
git config filter.ignore_value.clean "sed -e '/^value= .*$/d'"
这只是初稿,因为 value
属性可能不在行的开头:您需要调整正则表达式以检测并忽略您希望更改的任何行跳过。
OP Robert Smith points to () 更完整的命令有:
git diff --unified=0 HEAD~1 HEAD | grep -v -E -f PATTERNS.txt
我正在尝试获取大量 HTML 文档的提交之间的更改,但我很快注意到大多数更改并不重要,通常是日志记录的结果,版本更改以防止缓存或外部脚本。例如:
<a class="support-ga" target="_blank" href="#">0fb63cacd50e / 0fb63cacd50e @
-app-151</a>
+app-107</a>
<input type='hidden' name='csrfmiddlewaretoken'
-value='82NB5DdySoICu1mqcl0RZVk5dMCOVEQd'
+value='a0zBgxBevaBugotGpNKI6kMPsIsBbH44'
/>
前面的示例表明查看这些更改可能不是很有趣或有用。
我想知道是否有 git diff 命令可以忽略这种变化。另一种选择是根据相似性对差异进行排名。到目前为止,我一直在使用 git diff --word-diff=porcelain --unified=0 HEAD~1 HEAD
命令,然后处理该输出以提取更改、计算 Levenshtein 距离并删除重复项。这有帮助,但考虑到 git 已经知道应该比较哪些行并提供可配置的行数作为上下文,这不是一个很好的解决方案。
您可以尝试编写一个差异驱动程序来忽略特定模式。
参见 this discussion as an example。
echo '*.html filter=ignore_value' >> .gitattributes
git config filter.ignore_value.clean "sed -e '/^value= .*$/d'"
这只是初稿,因为 value
属性可能不在行的开头:您需要调整正则表达式以检测并忽略您希望更改的任何行跳过。
OP Robert Smith points to (
git diff --unified=0 HEAD~1 HEAD | grep -v -E -f PATTERNS.txt