这是git branch -v
在我的本地目录之一中产生的
* develop e229f7a Merge branch 'develop' of https://github.com/me/myremote-repo.git into develop Some diffs
master 3343dea [behind 2] Added git-log, same as git_log without colorization
我正在尝试遍历分支集和该命令的输出,并且如果输出包含[a前面的n]或[m后面的],我想提出一条语句:
[behind 2] --> bin [master] 3343dea
[ahead 1] --> bin [develop] 99345b
对于每个分支,如果它包含在前面或后面。
我的代码中目前包含以下内容:
MOD=`git branch -v | perl -wlne '/^..(\S+)\s+([a-f0-9]+)\s+(\[ahead\s+\d+\]|\[behind\s+\d+\])/ or next; print "$3 --> $ENV{reponame} [$1] $2"; '`;
[ ! -z "$MOD" ] && MOD="$MOD" | ok=false
if $ok; then
echo " OK --> $reponame [$br]"
else
# a series of UGLY HACKs to get pretty-printing
MOD=`echo "$MOD" | tr -d '\011\012\015' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'` | sed -e 's/]#/]\
#/'
if [ ! -z "$MOD" ]; then
echo -e " $MOD" && continue
fi
fi
bin [develop] --> Out of sync with origin/HEAD at /Users/me/bin
bin [develop] --> Changes to be staged/committed at /Users/me/bin
[behind 2] --> bin [master] 3343dea
OK --> patti [develop]
OK --> notes [master]
OK --> indecks [develop]
OK --> queue [develop]
OK --> frameworks [develop]
OK --> nodejs [master]
OK --> perl-forth [develop]
OK --> patti [master]
OK --> blog [develop]
问题是我只得到第一个。如果有两个分支在前面或后面,我只会得到第一个。我尝试了几种方法来将git branch -v的输出获取到数组中,然后遍历数组,如果它与模式匹配,则执行打印。问题是我找不到一种可以正常工作的方式将输出输出到数组中。然后,当我遍历数组时,会得到所有文件的列表。
我用:
branches={`git branch -v`)
for i in "${branches[@]}"
do
echo "$i"
done
我得到的是目录中所有文件的列表!
为什么,该怎么办?
使用read
一个while
循环,以获得从线perl
到MOD
逐一。
git branch -v |
perl -wlne'
print "$3 --> $ENV{reponame} [$1] $2"
if /^..(\S+)\s+([a-f0-9]+)\s+(\[(?:ahead|behind)\s+\d+\])/
' |
while IFS= read -r MOD; do
printf '{%s}\n' "$MOD" # Replace with code that uses $MOD
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句