Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Grep所有同名文件';使用管道跨所有git分支的属性_Linux_Git_Shell_Git Plumbing - Fatal编程技术网

Linux Grep所有同名文件';使用管道跨所有git分支的属性

Linux Grep所有同名文件';使用管道跨所有git分支的属性,linux,git,shell,git-plumbing,Linux,Git,Shell,Git Plumbing,我有一个按分支分隔的配置文件的git repo,例如: refs/heads/branch1, file - settings.properties refs/heads/branch2, file - settings.properties 等等 我正在尝试grep存储库中每个设置.properties文件的某些属性: git for-each-ref refs/heads --shell --format=‘%(refname:short)’ | xargs -n1 git checkou

我有一个按分支分隔的配置文件的git repo,例如:

refs/heads/branch1, file - settings.properties
refs/heads/branch2, file - settings.properties
等等

我正在尝试grep存储库中每个
设置.properties
文件的某些属性:

git for-each-ref refs/heads --shell --format=‘%(refname:short)’ | xargs -n1 git checkout | cat settings.properties | grep ‘host.name’
第一个命令给我分支列表,第二个命令一个接一个地将我签出到每个分支,我希望第三个命令cat文件,第四个命令grep某些属性。前两个命令工作得很好,但如果我运行整个命令,它只会为第一个分支greps host.name


很明显,我遗漏了一些关于管道的重要信息。我知道我可以将其作为shell脚本编写,并在循环中完成所有这些操作,但我希望保留“管道”方法,因为我可能经常需要
cat
不同的文件和
grep
不同的属性,并且不想处理将参数传递到脚本中的问题,所以您不需要签出每个分支来获取关于该文件的信息。您可以改为使用
git cat file
显示该分支上的文件内容

所以你可以做一些类似的事情(未经测试):

或者,如果您希望它更短,您可以直接使用
git grep

git for-each-ref refs/heads --shell --format='%(refname:short)' | \
    xargs -n1 -I{} git --no-pager grep host.name {}:settings.properties

您不需要签出每个分支来获取有关该文件的信息。您可以改为使用
git cat file
显示该分支上的文件内容

所以你可以做一些类似的事情(未经测试):

或者,如果您希望它更短,您可以直接使用
git grep

git for-each-ref refs/heads --shell --format='%(refname:short)' | \
    xargs -n1 -I{} git --no-pager grep host.name {}:settings.properties

您没有将
cat
包装在循环中或使用
xargs
,因此它只运行一次,您希望它在哪里为每个引用运行。您没有将
cat
包装在循环中或使用
xargs
,因此它只运行一次,您希望它在哪里为每个引用运行。第二个命令以交互方式执行了此操作(我必须每次按“q”来遍历所有分支)。第一个给了我git cat文件的用法,我假设是因为git cat文件需要对象的哈希。如果我试图将git对象哈希添加到管道中,它不会切换分支。有什么想法吗?非常感谢您的帮助!我已将其编辑为使用
git cat文件blob
,这应该是正确的调用。您可以使用任何任意方法blob表达式。如果您不想使用寻呼机,可以在
git grep
前面加上
env git_pager=cat
,这将禁用寻呼机。
git——无寻呼机…
@bk2204两个选项都可以,非常感谢,非常感谢!第二个命令以交互方式完成了此操作(我必须每次按“q”来遍历所有分支)。第一个给了我git cat文件的用法,我假设是因为git cat文件需要对象的哈希。如果我试图将git对象哈希添加到管道中,它不会切换分支。有什么想法吗?非常感谢您的帮助!我已将其编辑为使用
git cat文件blob
,这应该是正确的调用。您可以使用任何任意方法blob表达式。如果你不想要寻呼机,你可以在
git grep
前面加上
env git_pager=cat
,这将禁用寻呼机。
git--no pager…
@bk2204两个选项都可以,非常感谢,非常感谢!