89 lines
No EOL
2.7 KiB
Bash
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." |