linux - 使用管道在所有 git 分支中对所有同名文件的属性进行 grep
问题描述
我有一个按分支分隔的配置文件的 git 存储库,例如:
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’
第一个命令给了我我的分支列表,第二个命令一个接一个地检查每个分支,我希望第三个命令 cat 文件和第四个命令 grep 某些属性。前 2 个命令工作得很好,但如果我运行整个东西,它只会为第一个分支 greps host.name。
我显然遗漏了有关管道的一些重要内容。我知道我可以将它编写为 shell 脚本并在循环中执行所有这些操作,但我想保留“管道”方法,因为我可能经常需要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
推荐阅读
- filter - 筛选另一列数据范围的行 - PowerBI
- javascript - 将函数定义为方法和将其定义为属性之间的区别
- javascript - 使用 setInterval 和 EventListeners 构建 javascript 计时器以实现启动和休息功能
- postgresql - Postgresql 查询的过滤条件中的列上的字符串操作如何影响它选择的计划
- javascript - 比较两个单词向后和向前拼写在JS中的方式相同
- pine-script - 回测时的 Pine 脚本错误“无数据”
- azure - 将第二代 Hyper-V 托管的 Gentoo Linux VM 迁移到 Azure 后出现启动错误
- asp.net-mvc - 使用 IIS 重写多租户应用程序的 URL
- python - 方法不返回列表的开头
- python - FileNotFoundError:[Errno 2] 没有这样的文件或目录:'readme.md'