[英]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.