使用管道在所有 git 分支中查找所有同名文件的属性

Grep all the same name files' properties across all the git branches using pipelines

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

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

等等

我正在尝试对每个存储库中每个 settings.properties 文件的某些 属性 进行 grep:

git for-each-ref refs/heads --shell --format=‘%(refname:short)’ | xargs -n1 git checkout | cat settings.properties | grep ‘host.name’

第一个命令给出了我的分支列表,第二个命令一个接一个地检查我的每个分支,我希望第 3 个命令 cat 文件和第 4 个命令 grep 某些 属性。前 2 个命令工作得很好,但如果我 运行 整个事情它只是 greps host.name 只为第一个分支。

我显然遗漏了有关管道的一些重要信息。我知道我可以把它写成一个 shell 脚本并循环执行所有这些,但我想保留 'pipeline' 方法,因为我可能经常需要 cat 不同的文件和grep 不同的属性,不想处理将参数传递到脚本中的问题

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

所以你可以做一些像这样的事情(未经测试):

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

或者如果你想让它更短,你可以直接使用 git grep:

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