我今天发现了
git rev-parse --show-toplevel && git ls-files
在gir存储库的top目录中搜索所有跟踪的文件。有没有办法让grep尊重它的输出,只搜索那些文件?
我试过
git rev-parse --show-toplevel && git ls-files | grep -r "something"
但在我的小测试中表明它的管道实际上并没有工作。它的行为与普通的grep命令相同。
我也试过(仅作为例子)
grep -r "something" --include=`git ls-files`
但我认为这只适用于单个文件,因为它没有显示所有可能的匹配
答案 0 :(得分:1)
你的第一个断言是不正确的,因为这两个命令是彼此分开执行的(第二个命令只在第一个命令成功完成时执行)。
我想你首先想要的是:
git ls-files "$(git rev-parse --show-toplevel)"
这会将顶级目录作为参数传递给git ls-files
。
要查看某些内容的文件列表,可以使用xargs
:
git ls-files -z "$(git rev-parse --show-toplevel)" | xargs -0 grep 'something'
我已将-z
开关添加到ls-files并将相应的-0
切换到xargs,这样两个工具的输入/输出都使用空字节,这意味着尴尬的字符在文件名中不会导致任何问题。
我不认为-r
开关在grep中做了任何有用的事情,因为ls-files的输出不包含任何目录(git只跟踪文件)。