使用正则表达式搜索文件名

Nil*_*mat 4 regex git

有什么办法可以做类似的事情git log <path>,但是可以使用正则表达式代替路径吗?我想搜索包含文件名与给定模式匹配的文件的提交...

……而我们正在讨论:是否还有一种方法仅对匹配给定模式的文件名执行git status/ git diff

提前致谢!

编辑:如果有任何方法,我将非常棒,它也适用于Git v1.7.1。

Sas*_*olf 5

就纯git解决方案而言,我知道匹配特定文件模式的唯一选择是使用glob。

git log -- '*.json'
Run Code Online (Sandbox Code Playgroud)

将为您提供所有包含文件更改的json文件。可以做同样的事情git status


另一方面,在diff或commit消息中搜索正则表达式非常容易。git log提供了一个--grep在提交消息中搜索匹配-S项的选项,以及一个搜索字符串的选项。

请看这个问题以获取更多详细信息


Gre*_*ent 3

对于简单的模式,您可以尝试,例如:

find . -name "*.c" | xargs git log
Run Code Online (Sandbox Code Playgroud)

对于完整的正则表达式,您可以使用:

find . | grep "REGEX" | xargs git log
Run Code Online (Sandbox Code Playgroud)

如果您需要将以前删除的文件包含在输出中,您可以使用

git log --all --pretty=format: --name-only --diff-filter=A | sort -u | grep "REGEX" | xargs git log --
Run Code Online (Sandbox Code Playgroud)

上述命令的第一部分,它查找 git 中曾经存在的所有文件,是从另一个问题的答案中提取出来的。

  • 使用“find -iregex 'regex'”比“find |”要好得多。grep 'regex'` ——一方面,使用 `-print0` 你可以将极其奇怪的匹配提供给 `xargs -0`。(另一方面,保存一个进程始终是一种好的做法,但这显然在这里只具有边际重要性。) (3认同)