首页 > 解决方案 > 根据分支类型列出分支名称

问题描述

我在功能广告发布类型下有 git 分支,当我将输入作为发布或可能的字符串(re,rel..etc)与功能分支和其他分支类型相同时,我想显示发布分支。当我根据我的输入将分支类型作为发布或功能获取后,我现在有一个命令来给出分支类型,我想在我选择的类型下显示分支名称。

我有命令:

#!/bin/bash
read branchtype
git branch --remote --list origin/*  | grep  $branchtype | cut -d '/' -f2 | sort -u


#!/bin/bash
read branchtype
git branch --remote --list origin/*  | grep  $branchtype | cut -d '/' -f2 | sort -u

标签: shell

解决方案


首先,我认为如果您使用脚本的参数而不是阅读标准输入,您将有更轻松的时间。

其次,为什么要使用全局模式 ( origin/*) 来返回所有内容,只是为了使用单独的程序 ( grep) 进行过滤?

最后,也许我误解了,但我想像origin/feature/newThingand origin/feature/coolUpgradeand之类的分支名称origin/bugfix/oopsie。选择 for feature,那只cut -d '/' -f2 | sort -u会吐出来feature,没有别的。(也许你想要-f3?)

试试这个:(首先创建文件 ~/bin/branchFilter ...)

$: cat ~/bin/branchFilter
#!/bin/bash
git branch --remote --list origin/*$1*

然后使用它。(确保您设置了可执行权限。)

$: branchFilter # no argument
  origin/HEAD -> origin/master
  origin/bugfix/bar
  origin/bugfix/foo
  origin/dev
  origin/feature/otherName
  origin/feature/test
  origin/hotfix/thisIsBroken
  origin/master
  origin/preprod
  origin/production
  origin/qa
  origin/sit
  origin/uat
  origin/wip

$: branchFilter feature
  origin/feature/otherName
  origin/feature/test

$: branchFilter bugfix
  origin/bugfix/bar
  origin/bugfix/foo

$: branchFilter fix
  origin/bugfix/bar
  origin/bugfix/foo
  origin/hotfix/thisIsBroken

如果您真的需要origin/从头开始,请使用sed.

$: cat ~/bin/branchFilter
#!/bin/bash
git branch --remote --list origin/*$1* |
  sed 's,origin/,,'

$: branchFilter fix
  bugfix/bar
  bugfix/foo
  hotfix/thisIsBroken

如果您只需要从输入中读取(我认为这是一个糟糕的结构,但是您的程序),它仍然以相同的方式工作。

$: cat ~/bin/branchFilter
#!/bin/bash
read str
git branch --remote --list "origin/*$str*" |
  sed 's,origin/,,'

推荐阅读