如何使用bash脚本迭代所有git分支
如何使用bash脚本遍历存储库中的所有本地分支。
我需要迭代并检查分支和一些远程分支之间是否有任何区别。
防爆
for branch in $(git branch);
do
git log --oneline $branch ^remotes/origin/master;
done
我需要做上面给出的事情,但我面临的问题是$(git branch)给了我存储库文件夹中的文件夹以及存储库中存在的分支。
这是解决此问题的正确方法吗?或者还有另一种方法吗?
谢谢
没有找到相关结果
已邀请:
9 个回复
委婪绷冗诉
注意:您不需要远程引用上的
前缀,除非您有其他引用
匹配引用名称搜索路径中的多个位置(请参阅git-rev的“指定修订”部分中的“符号引用名称。...” -parse(1))。如果你试图明确地避免含糊不清,那么请使用完整的引用名称:
。 你会得到这样的输出:
您可以将此输出传递给sh。 如果你不喜欢生成shell代码的想法,你可以放弃一些健壮性*并执行此操作:
* 引用名称应该是shell的单词拆分安全(参见git-check-ref-format(1))。我个人会坚持使用以前的版本(生成的shell代码);我更有信心不会发生任何不适当的事情。 由于您指定了bash并且它支持数组,因此您可以保持安全并仍然避免生成循环的内容:
如果你没有使用支持数组的shell(
初始化和
添加元素),你可以用ѭ8做类似的事情。
甲车劲
用星号标记当前分支,例如:
所以
扩大到例如
,然后
扩展到当前目录中的文件列表。 我没有看到一个明显的选择,即不首先打印星号;但你可以砍掉它:
裸雷胜檀哭
搂腹时
如果您的本地分支仅由数字,a-z和/或A-Z字母命名
纤洞需匪
bash case构造和参数替换中的星号需要使用反斜杠进行转义,以防止shell将它们解释为模式匹配字符。空格也被转义(以防止标记化),因为你实际上匹配'*'。
秃拳割
,就是为此而建的 所有的git分支:
所有当地的git分支:
所有远程git分支:
遍历所有git分支:
例:
针对OP的具体情况:
source:列出没有星号的所有本地git分支
先对冈蒲
的启发):
(我使用while循环很多。虽然对于特定的东西你肯定想要使用一个有针对性的变量名[例如]“分支”),大多数时候我只关心每行输入做一些事情。 'line'在这里而不是'branch'是对可重用性/肌肉记忆/效率的点头。)
泉秘胁
输出:
Grep的-o选项(--only-matching)将输出限制为仅输入的匹配部分。 由于空格和*在Git分支名称中都不起作用,因此返回没有额外字符的分支列表。 编辑:如果您处于'分离头'状态,则需要过滤掉当前条目:
久坡
while循环在子shell中运行,除非您在当前shell中设置要访问的shell变量,否则这通常很好。在这种情况下,您使用进程替换来反转管道: