开发者社区> 问答> 正文

使用管道在所有git分支上对所有相同名称文件的属性进行Grep

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

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

等等

我试图grep settings.properties每个存储库中每个文件的某些属性:

git for-each-ref refs/heads --shell --format=‘%(refname:short)’ | xargs -n1 git checkout | cat settings.properties | grep ‘host.name’ 第一个命令给我分支的列表,第二个命令一个接一个地检查我到每个分支,我希望第三个命令可以管理文件,第四个命令可以grep某些属性。前2个命令运行正常,但是如果我运行整个程序,则只对第一个分支使用host.name即可。

我显然缺少有关管道的一些重要信息。我知道我可以将其编写为shell脚本并循环执行所有这些操作,但是我想保留“管道”方法,因为我可能经常需要使用cat不同的文件和grep属性,并且不想处理传递参数放入脚本

展开
收起
祖安文状元 2020-01-16 16:43:48 452 0
1 条回答
写回答
取消 提交回答
  • 您无需检出每个分支即可获取有关该文件的信息。您可以改为使用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
    
    2020-01-16 16:44:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
新一代高效Git协同模型 立即下载
AGit-Flow:新一代高效Git协同模型 立即下载
AGit-flow:新一代高效Git协同模型 立即下载

相关实验场景

更多