获取所有与正则表达式匹配的 Git 分支,并将其拆分为数组。

5
我正在尝试从我的git仓库中获取与正则表达式匹配的所有分支(git branches -a并使用grep xxx过滤)。
通常在命令行中,我会这样写:
git branch -a | grep xxx

我正在尝试在.sh文件中执行相同的操作:

  1. 获取与正则表达式匹配的所有分支
  2. 将其拆分为数组
  3. 获取第一个分支

以下是我的代码:

#!/bin/bash

branches=( $(git branch -a | grep $1) )

echo branches : $branches
echo branch : ${branches[0]}

遗憾的是,它会在当前文件夹中添加所有文件。

这是输出结果:

$> checkout.sh 2887
branches : ant 
branch : ant 

如果我将branches=( $(git branch -a | grep $1) )更改为branches=$(git branch -a | grep $1),那么我会得到目录中的所有文件以及分支名称在最后面。


2
“all files” 的内容可以在 http://stackoverflow.com/questions/24812464/git-branch-vs-git-branch/24812543 找到。 - Etan Reisner
@EtanReisner的帖子是一个答案,你会得到加分。 - MAGx2
2
git branch 直接使用模式匹配,无需使用 grep。我相信 git branch -a --list "*$1*" 可以满足你的需求。 - Etan Reisner
1个回答

11

Etan在他的评论中提出了简单的方法。

你的错误可能是因为你没有引用$1,所以如果你传递一个带有通配符的正则表达式(比如script 'release-.*'),shell会在将变量传递给grep之前检查它--会发生单词分割和文件名扩展。每当你不能绝对控制内容时,你必须引用变量。

此外,没有理由将结果存储在数组中,只为了获取第一个结果,让grep处理:

first_match=$( git branch -a | grep -m 1 "$1" )

但是请使用git branch -a --list pattern


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接