我对大量在git中受版本控制的文件做了一个简单的更改,我希望能够检查没有其他更改滑入这个大的提交。
这些更改都是形式上的
- "main()",
+ OOMPH_CURRENT_FUNCTION,
其中"main()“可以是任何函数的名称。我想生成一个不同于此形式的所有更改的差异。
git diff的-G和-S选项非常接近--它们会找到与字符串或正则表达式匹配的更改。
有什么好方法可以做到这一点吗?
到目前为止的尝试
另一个question描述了如何对正则表达式求反,使用这种方法,我认为命令应该是
git diff -G '^((?!OOMPH_CURRENT_FUNCTION).)*$'
但这只会返回错误消息
fatal: invalid log-grep regex: Invalid preceding regular expression
所以我猜git不支持这个正则表达式特性。
我还注意到,标准的unix diff有-I选项来“忽略所有行都与RE匹配的更改”。但是我找不到用unix diff工具替换git自己的diff的正确方法。
发布于 2018-07-08 21:35:13
使用git difftool
运行真正的diff
。
示例:https://github.com/cben/kubernetes-discovery-samples/commit/b1e946434e73d8d1650c887f7d49b46dcbd835a6
我已经按我想要的方式创建了一个运行diff
的脚本(在这里,我将curl --verbose
输出保存在存储库中,导致每次我重新运行curl时都会有一些无聊的更改):
#!/bin/bash
diff --recursive --unified=1 --color \
--ignore-matching-lines=serverAddress \
--ignore-matching-lines='^\* subject:' \
--ignore-matching-lines='^\* start date:' \
--ignore-matching-lines='^\* expire date:' \
--ignore-matching-lines='^\* issuer:' \
--ignore-matching-lines='^< Date:' \
--ignore-matching-lines='^< Content-Length:' \
--ignore-matching-lines='--:--:--' \
--ignore-matching-lines='{ \[[0-9]* bytes data\]' \
"$@"
现在我可以运行git difftool --dir-diff --extcmd=path/to/above/script.sh
,只看到有趣的变化。
关于GNU diff -I
也就是--ignore-matching-lines
,有一个重要的警告:这仅仅是防止这样的代码行“有趣”,但当这些更改出现在与其他未被忽略的更改相同的块中时,它仍然会显示它们。我在上面使用了--unified=1
,通过将块变小来减少这种影响(每个更改上下只有一行上下文行)。
https://stackoverflow.com/questions/15878622
复制相似问题