我想删除生产git repo中包含" _TEST"的标签的所有标签。
#!/bin/bash
COMMITS_TO_REMOVE=$(git ls-remote git@github.com:REPONAME | grep _test | cut -f1)
COMMITS_TO_REMOVE_NO_CRLF=$(echo "$COMMITS_TO_REMOVE" | tr '\n' ' ')
for c in $COMMITS_TO_REMOVE_NO_CRLF
do
git tag -d $c;
git push origin $c;
done;
但:
1)COMMITS_TO_REMOVE_NO_CRLF在运行"对于c中的空格时不被空格分割..."
2)当我试图推回标签时,它没有采取。
想法?
答案 0 :(得分:1)
您不需要COMMITS_TO_REMOVE_NO_CRLF
,bash将换行符视为空格。
您可以删除标记,并且至少从1.7开始,使用xargs
批量推送删除。
结合,
commits=$(git ls-remote $remote | sed -n '/_test[^^]*$/ s,.*refs/tags/,,p')
echo "$commits" | xargs tag -d
echo "$commits" | xargs git push --delete git@github.com:repo