我一直想从git存储库中清除所有未使用的分支。大约有100个分支机构。
有一种方法可以从BitBucket帐户中一个接一个地选择分支并将其手动删除。但是这种方法可以接受。
因此,我创建了一个脚本,该脚本可批量删除分支并在Linux / Ubuntu中受支持。
创建delete_branch.sh
#!/bin/bash
delete_branch(){
BRANCH=$1;
DIR_PATH=<path of your project root>;
cd ${DIR_PATH}
echo git push origin --delete ${BRANCH}
git push origin --delete ${BRANCH}
}
BRANCHES=( branch1 branch2 branch3 ... branchN );
for i in "${BRANCHES[@]}"
do
:
delete_branch $i;
echo deleting branch ${i};
done
通过./delete_branch.sh从终端执行此文件
答案 0 :(得分:1)
对我来说,“未使用”的分支定义为合并到当前分支中的任何东西,不称为master,develop或release / *。如果您同意,则可以使用这两个bash脚本(将它们放在PATH中,一个调用另一个)。
默认的远程清理称为origin,但是可以将其指定为第二个参数,排除的分支是第三个参数。
#!/bin/bash
set -e
function listbranches {
git branch -r --merged | tr -d ' ' | sed "s/$remote\///" | grep -vxE "$excludes"
}
remote=${2:-origin}
excludes=${3:-master|develop|release/.*}
if [ "$1" == "--dry-run" ]; then
echo "The following branches would be deleted:"
listbranches
exit 0;
elif [ "$1" == "--really-delete" ]; then
echo "Deleting remote branches..."
else
echo "Error: first parameter must be either --dry-run or --really-delete"
exit 1
fi
listbranches | deleteremotebranches.sh $remote
#!/bin/bash
set -e
remote=${1:-origin}
xargs git push $remote --delete
典型用法是仅运行cleanupremote.sh
来查看所需的开关,然后使用--dry-run重复此操作,并添加到第三个参数,直到没有列出不需要的分支为止:
cleanupremote.sh --dry-run origin 'master|develop|feature/oh_not_that_one_I_need_it'
cleanupremote.sh --really-delete origin 'master|develop|feature/oh_not_that_one_I_need_it'
这是两个单独的文件,因此您可以直接调用deletebranches.sh,在要删除的分支名称中指定一个远程目录和管道。