#!/bin/bash # --- Git-Toolbox v1.0.4 --- # Features: Zweig-Erkennung, Security-Warnung für Main, Hilfe-Funktion (-h) # 1. Hilfe-Funktion definieren show_help() { echo "Nutzung: git-up [OPTIONEN]" echo "" echo "Optionen:" echo " -m 'Nachricht' Direktes Committen mit dieser Nachricht (überspringt Abfrage)." echo " -t 'v1.0.0' Erstellt direkt einen Versions-Tag (überspringt Abfrage)." echo " -h Zeigt diese Hilfe an." echo "" echo "Beispiel: git-up -m 'Fix: Login-Bug' -t 'v1.0.5'" exit 0 } # 2. Variablen initialisieren COMMIT_MSG="" TAG_NAME="" # 3. Argumente auswerten (Flags) while getopts "m:t:h" opt; do case $opt in m) COMMIT_MSG="$OPTARG" ;; t) TAG_NAME="$OPTARG" ;; h) show_help ;; *) echo "Unbekannte Option. Nutze -h für Hilfe."; exit 1 ;; esac done # 4. Aktuellen Zweig (Branch) ermitteln CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) if [ -z "$CURRENT_BRANCH" ]; then echo "❌ Fehler: Dies ist kein Git-Repository!" exit 1 fi echo "--- Arbeitsverzeichnis: $(pwd) ---" echo "--- Aktueller Zweig: [$CURRENT_BRANCH] ---" # 5. Security-Check: Arbeiten auf dem Hauptstamm if [[ "$CURRENT_BRANCH" == "main" || "$CURRENT_BRANCH" == "master" ]]; then echo "⚠️ WARNUNG: Du arbeitest direkt auf dem Hauptzweig ($CURRENT_BRANCH)." read -p "Bist du sicher, dass du hier direkt pushen willst? (j/n): " confirm if [[ ! "$confirm" =~ ^[Jj]$ ]]; then echo "Abbruch. Erstelle einen neuen Zweig mit: git checkout -b feature-name" exit 0 fi fi # 6. Änderungen prüfen CHANGES=$(git status --porcelain) if [ -z "$CHANGES" ]; then echo "Info: Keine Änderungen zum Committen." else git status -s # Falls keine Nachricht per Flag kam: Abfragen if [ -z "$COMMIT_MSG" ]; then echo "------------------------------------------------" read -p "Was wurde geändert? (Commit-Nachricht): " COMMIT_MSG fi # Fallback auf Zeitstempel [ -z "$COMMIT_MSG" ] && COMMIT_MSG="Update am $(date +'%d.%m.%Y %H:%M')" git add . git commit -m "$COMMIT_MSG" fi # 7. Tagging (nur wenn gewünscht) if [ -z "$TAG_NAME" ]; then echo "------------------------------------------------" read -p "Neuer Tag (z.B. v1.0.4) oder Enter zum Überspringen: " TAG_NAME fi # 8. Intelligenter Push zum aktuellen Zweig if [ -n "$TAG_NAME" ]; then git tag -a "$TAG_NAME" -m "Version $TAG_NAME" echo "Pushe Commits und Tags zu: origin/$CURRENT_BRANCH..." git push origin "$CURRENT_BRANCH" --follow-tags else echo "Pushe Commits zu: origin/$CURRENT_BRANCH..." git push origin "$CURRENT_BRANCH" fi echo "------------------------------------------------" echo "✅ Fertig! Alles sicher im Zweig '$CURRENT_BRANCH' gespeichert."