git-toolbox/git-up.sh
2026-04-26 19:38:42 +02:00

89 lines
No EOL
2.7 KiB
Bash

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