循环遍历所有具有特定名称的git分支。

14 浏览
0 Comments

循环遍历所有具有特定名称的git分支。

我有以下git分支:

foo
bar
foobar
feature/foo
feature/bar
feature/buzz

你如何使用for循环遍历所有以'feature/'开头的分支?

当我尝试以下操作时,它奇怪地打印出了不仅仅是git分支。

for i in $(git branch --list "feature/*"); do echo $i; done;
stuff.txt
icon.jpg
morestuff.txt
Vagrantfile
feature/foo
feature/bar
feature/buzz

0
0 Comments

问题:如何在脚本中循环遍历所有具有特定名称的git分支?

原因:在Git维护者的博客中明确表示不建议在脚本中使用任何Porcelain命令,包括git branch。这是因为Porcelain命令通常用于与用户进行交互,并且它们的输出格式可能会发生变化,从而导致脚本错误。

解决方法:相反,建议使用非Porcelain命令git for-each-ref来获取所需的分支列表。使用--format选项可以指定输出的格式,通过使用%(refname:short)可以获取分支的简短名称。然后,可以在一个for循环中使用$(git for-each-ref ...)来遍历分支列表。

下面是一个示例代码片段,演示了如何在脚本中循环遍历具有特定名称的git分支:

for br in $(git for-each-ref --format='%(refname:short)' refs/heads/feature/)
do
    echo "Branch name: $br"
    # 在这里添加你想要执行的操作
done

通过将上述代码放入脚本中,并将需要操作的代码添加到循环内部,就可以在所有具有特定名称的git分支上执行相同的操作了。这种方法不依赖于Porcelain命令,因此更加稳定和可靠。

0