繁体   English   中英

Bash - 如何获取 git 分支的列表?

[英]Bash - how to get a list of git branches?

我正在研究 bash 脚本,该脚本搜索 git 分支并列出它们:

# Search for a branch by name.
gbs () {
  branches=`git branch --list $1*`
  branches_len=${#branches[@]}
  echo "$branches_len branches found:"
  for branch in $branches
  do
   printf "$branch\n"
  done
}

output 是:

joe.bloggs$ gbs X
1 branches found:
XX/test1
XX/test2

为什么在迭代数组并找到 2 个分支时只显示找到 1 个分支?

git branch命令仅用于交互式 shell 目的。 它具有精美的格式、布局和突出显示,使其更易于人类阅读; 但是一旦尝试从脚本中解析它,它就会变成一个错误陷阱。

因为它没有提供一致的稳定和编程友好的 output 格式; 不能依赖它来使用 shell 脚本解析其 output。

大多数 shell 脚本需要的通用且稳定的 Git API 入口点是git for-each-ref命令。

因此,在这里您的分支搜索 function 可以简化,并且使用git for-each-ref而不是git branch显着更可靠:

gbs() {
  git for-each-ref --format='%(refname:strip=2)' "refs/heads/$1"
}

或者,如果您想搜索作为 arguments 提供的所有模式:

gbs() {
  git for-each-ref --format='%(refname:strip=2)' "${@/#/refs\/heads\/}"
}

对于漂亮且可移植的 bash/zsh git 样板函数示例,与我在上面为您写的内容的 bash 完成大部分相同的分支搜索 function 见: https://github.com/git/git/tree/master/contrib/completion

好的,我刚刚找到了正确的语法:

# Search for a branch by name.
gbs () {
  branches=(`git branch --list $1*`)
  branches_len=${#branches[@]}
  echo "$branches_len branches found:"
  for branch in ${branches[@]}
  do
   printf "$branch\n"
  done
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM