Linux Grep所有同名文件';使用管道跨所有git分支的属性
我有一个按分支分隔的配置文件的git repo,例如: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
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两个选项都可以,非常感谢,非常感谢!