我要求删除最近离开该组织的开发人员的git存储库中的分支。所以我使用git for-each-ref列出所有分支,然后使用grep按开发者名称过滤结果(以下脚本中的test_developer)。我使用shell read和extract分支到变量mybr并使用git push origin --delete来删除分支。请在下面找到代码段:
git for-each-ref --format='%(align:1,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authorname refs/remotes | grep test_developer | while read line;do mystr=(${line}); mybr=${mystr[1]}; git push origin --delete "$mybr"; done
问题是输出为“致命:refspec的远程部分不是有效名称:?[mbugfix / CRIP-2475”。这里的bugfix / CRIP-2475是分支名称。我想知道那些额外的字符是什么:?[m在分支名称之前附加了。
如果我在git delete之前回显$ mybr,我会将值正确打印为“bugfix / CRIP-2475”。如果我手动将此值传递给git delete,它工作正常。但是当它作为变量传递时,我得到上述错误。我怀疑有一些特殊的字符被预先添加,可能是一个ctrlM字符或回声没有打印到屏幕上的东西。
有没有删除那些额外的字符?
答案 0 :(得分:1)
是的,您可以使用Bash sub-string replacement
删除 ${str/#find/replace}
用于替换预修复字符
${str/%find/replace}
用于替换修复后字符
git for-each-ref --format='%(align:1,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authorname refs/remotes | grep test_developer | while read line;do mystr=(${line}); mybr=${mystr[1]}; git push origin --delete "${mybr/#?[m/}"; done
答案 1 :(得分:1)
这些“神奇”符号当然是colors。你喊'在管道中使用颜色:
git for-each-ref --format='%(align:1,left)%(authorname)%(end) %(refname:strip=3)' --sort=authorname refs/remotes | …