Есть ли способ массового удаления git веток? - PullRequest
1 голос
/ 02 апреля 2020

Я пытался удалить все неиспользуемые ветки из моего 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

1 Ответ

1 голос
/ 02 апреля 2020

Для меня «неиспользуемые» ветки определяются как что-либо, объединенное с текущей веткой, которое не называется master, development или release / *. Если вы согласны, вы можете использовать эти два сценария bash (поместите их в PATH, один вызовет другой).

Удаленный по умолчанию метод очистки называется origin, но его можно указать в качестве второго параметра. , а исключенные ветви - третий параметр.

cleanupremote. sh

#!/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

deleteremotebranches. sh

#!/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 напрямую, указав удаленный и трубопровод в ответвлениях для удаления.

...