88 lines
2.7 KiB
Bash
Executable File
88 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ===============================
|
|
# Dateien sichern, die nicht gepusht werden
|
|
# ===============================
|
|
UNVERSIONED_FILES=("scripts/docker-release.sh")
|
|
for f in "${UNVERSIONED_FILES[@]}"; do
|
|
if [[ -f $f ]]; then
|
|
mkdir -p /tmp/git_safe_backup
|
|
cp "$f" "/tmp/git_safe_backup/$(basename "$f")"
|
|
fi
|
|
done
|
|
|
|
# ===============================
|
|
# Alle Branches sammeln
|
|
# ===============================
|
|
# Alle lokalen Branches holen, führende Sternchen und Leerzeichen entfernen
|
|
LOCAL_BRANCHES=$(git branch | sed 's/* //' | sed 's/^[[:space:]]*//')
|
|
|
|
# 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:]]*//')
|
|
|
|
# Beide Listen zusammenführen und Duplikate entfernen
|
|
ALL_BRANCHES=$(echo -e "$LOCAL_BRANCHES\n$REMOTE_BRANCHES" | sort -u)
|
|
|
|
# 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)
|
|
|
|
# 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"
|
|
|
|
# Remote-Stand holen
|
|
git fetch origin
|
|
|
|
# Branch wechseln (lokal erstellen, falls nur remote vorhanden)
|
|
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
|
|
|
|
# Arbeitsverzeichnis exakt auf Remote-Branch zurücksetzen
|
|
git reset --hard origin/$SELECTED_BRANCH
|
|
git clean -fd
|
|
|
|
# ===============================
|
|
# Gesicherte unversionierte Dateien zurückkopieren
|
|
# ===============================
|
|
for f in "${UNVERSIONED_FILES[@]}"; do
|
|
if [[ -f "/tmp/git_safe_backup/$(basename "$f")" ]]; then
|
|
mkdir -p "$(dirname "$f")"
|
|
mv "/tmp/git_safe_backup/$(basename "$f")" "$f"
|
|
fi
|
|
done
|
|
rm -rf /tmp/git_safe_backup
|
|
|
|
echo "Branch '$SELECTED_BRANCH' ist nun aktiv. Arbeitsverzeichnis entspricht exakt dem Remote-Stand."
|
|
echo "Unversionierte Dateien wurden wiederhergestellt."
|