Фон
Мне нужно закрыть несколько веток Git (сотни), которые были оставлены открытыми в удаленном хранилище.
Я хотел отсортировать их по последнимзафиксировать и поместить их в текстовый файл, чтобы другие могли подтвердить, что они больше не нужны.
Я нашел метод, который позволил мне создавать дампы таким образом, чтобы я мог их распространять (и открывать в Excel для сортировки по дате)
git for-each-ref --format='%(committerdate:short) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n >> branches.txt
А затем мне нужно прочитать обновленныйверните текстовый файл и удалите удаленные ветви:
#!/bin/bash
#prefix of the branches if they are all remote
prefix="refs/remotes/origin/"
prefix1="refs/remotes/"
# path to branches, compiled with:
# git for-each-ref --format='%(committerdate:short) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n >> branches.txt
# read through entire input
input="branches.txt"
while IFS= read -r line
do
# echo "$line"]
IFS=' ' read -r -a array <<< "$line"
# search the array for the prefix of the branch
for index in "${!array[@]}"
do
if [[ ${array[$index]} == *"refs/remotes/origin"* ]]; then
#echo -e " \e[34m ${array[$index]} \e[39m Last commit: \e[34m" ${array[0]} ${array[1]} ${array[2]} ${array[3]} ${array[4]}
# echo ${array[$index]#"$prefix"}
#remove the prefix if they are not pulled locally
branch=${array[$index]#"$prefix"}
echo $(git push origin --delete $branch)
fi
done
done < "$input"
Issue
Однако, продолжайте получать ошибку, что refspec
не существует:
fatal: invalid refspec ': PracticeBranch?'
У меня нет '
или ?
в имени переменной branch
- так что этоВозможно, мое невежество относительно использования echo
с `bash, но я не знаю, откуда оно.
Команда типа:
git push origin --delete PracticeBranch
При вызове непосредственно из оболочки?