diff --git a/scripts/switch-branch.sh b/scripts/switch-branch.sh index 2d88014..71e2fcf 100755 --- a/scripts/switch-branch.sh +++ b/scripts/switch-branch.sh @@ -1,36 +1,52 @@ #!/bin/bash -# Skript: Branch auswählen und wechseln -# Alle Branches abrufen (lokal + remote) -git fetch --all --prune +# Alle lokalen Branches holen, führende Sternchen und Leerzeichen entfernen +LOCAL_BRANCHES=$(git branch | sed 's/* //' | sed 's/^[[:space:]]*//') -# Lokale Branches -LOCAL_BRANCHES=$(git branch | sed 's/* //') -# Remote Branches (ohne origin/HEAD) -REMOTE_BRANCHES=$(git branch -r | grep -v 'HEAD' | sed 's|origin/||') +# Alle Remote-Branches holen, 'origin/' entfernen, HEAD ignorieren, führende Leerzeichen entfernen +REMOTE_BRANCHES=$(git branch -r | grep -v 'HEAD' | sed 's|origin/||' | sed 's/^[[:space:]]*//') -# Alle Branches zusammenführen und Duplikate entfernen +# Beide Listen zusammenführen und Duplikate entfernen ALL_BRANCHES=$(echo -e "$LOCAL_BRANCHES\n$REMOTE_BRANCHES" | sort -u) -# Array erstellen -BRANCH_ARRAY=($ALL_BRANCHES) +# Master und dev extrahieren, restliche feature-Branches alphabetisch +MASTER_BRANCH=$(echo "$ALL_BRANCHES" | grep -x 'master') +DEV_BRANCH=$(echo "$ALL_BRANCHES" | grep -x 'dev') +FEATURE_BRANCHES=$(echo "$ALL_BRANCHES" | grep '^feature/' | sort) -echo "Verfügbare Branches:" -PS3="Bitte wähle einen Branch zum Wechseln: " - -# Auswahlmenü -select CHOSEN_BRANCH in "${BRANCH_ARRAY[@]}"; do - if [[ -n "$CHOSEN_BRANCH" ]]; then - echo "Wechsle zu Branch: $CHOSEN_BRANCH" - # Prüfen, ob lokaler Branch existiert - if git show-ref --verify --quiet refs/heads/$CHOSEN_BRANCH; then - git checkout $CHOSEN_BRANCH - else - # Remote-Branch auschecken - git checkout -b $CHOSEN_BRANCH origin/$CHOSEN_BRANCH - fi - break - else - echo "Ungültige Auswahl. Bitte erneut versuchen." - fi +# Zusammenführen +SORTED_BRANCHES=() +[[ -n "$MASTER_BRANCH" ]] && SORTED_BRANCHES+=("$MASTER_BRANCH") +[[ -n "$DEV_BRANCH" ]] && SORTED_BRANCHES+=("$DEV_BRANCH") +for branch in $FEATURE_BRANCHES; do + SORTED_BRANCHES+=("$branch") done + +# Branches nummerieren +echo "Verfügbare Branches:" +i=1 +declare -A BRANCH_MAP +for branch in "${SORTED_BRANCHES[@]}"; do + echo "$i) $branch" + BRANCH_MAP[$i]=$branch + ((i++)) +done + +# Auswahl abfragen +read -p "Wähle einen Branch (Nummer): " choice + +# Validierung +if [[ -z "${BRANCH_MAP[$choice]}" ]]; then + echo "Ungültige Auswahl!" + exit 1 +fi + +SELECTED_BRANCH=${BRANCH_MAP[$choice]} +echo "Wechsle zu Branch: $SELECTED_BRANCH" + +# Wechseln, ggf. Branch erstellen, wenn nur Remote existiert +if git show-ref --verify --quiet refs/heads/$SELECTED_BRANCH; then + git checkout $SELECTED_BRANCH +else + git checkout -b $SELECTED_BRANCH origin/$SELECTED_BRANCH +fi