使用git diff

时间:2017-03-19 01:17:09

标签: 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已经知道应该比较哪些行并且提供可配置数量的行作为上下文,这不是一个很好的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以尝试编写差异驱动程序以忽略特定模式 请参阅this discussion as an example

DataTemplate

这只是初稿,因为public class AvatarIdToUrlConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { BitmapImage s; if (value == null || parameter == null) s = new BitmapImage(new Uri("https://something.com/assets/dd4dbc0016779df1378e7812eabaa04d.png")); else s = new BitmapImage(new Uri(String.Format("https://something.com/avatars/" + parameter.ToString() + "/" + value.ToString() + ".png?size=128"))); return s; } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } } public class IconIdToUrlConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { BitmapImage s; if (value == null || parameter == null) s = new BitmapImage(new Uri("https://something.com/assets/dd4dbc0016779df1378e7812eabaa04d.png")); else s = new BitmapImage(new Uri(String.Format("https://something.com/icons/" + parameter.ToString() + "/" + value.ToString() + ".png?size=128"))); return s; } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } } 属性可能不在行的开头:您需要调整正则表达式,以便检测并忽略您希望跳过的更改的任何行。

OP Robert Smith指向(in the comments)更完整的命令:

echo '*.html filter=ignore_value' >> .gitattributes
git config filter.ignore_value.clean "sed -e '/^value= .*$/d'"