【发布时间】:2017-03-21 11:25:37
【问题描述】:
我正在尝试获取大量 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 已经知道应该比较哪些行并提供可配置的行数作为上下文,这不是一个很好的解决方案。
【问题讨论】:
-
不确定您的用例是什么 - 像这样的日志和生成的代码通常不会包含在 git 存储库中。为了避免这个确切的问题,通常会忽略在构建/运行时生成的任何内容。
-
当然。显然,大量的 HTML 文档不是 git repo 的一部分。其中大部分是通过网络抓取下载的,并且网站大量使用 javascript。顺便说一句,我看到一些 git 客户端已经提供了相似性度量,但我认为这只是为了提供信息。
-
“相似度索引”内置于 Git 中,用于重命名检测:参见 stackoverflow.com/a/21292993/1256452(特别参见 cmets:它基于行,减去空格,但分为 60-长行或二进制文件的字符片段)。
-
有趣。那么“相似度索引”在这里不是很有用(即使可以使用),因为每一行都会有不同的哈希值。