403Webshell
Server IP : 202.61.199.114  /  Your IP : 216.73.217.139
Web Server : nginx/1.22.1
System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User : web20 ( 1018)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/clients/client2/taschenmuschi-kaufen.de/web/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/clients/client2/taschenmuschi-kaufen.de/web/update.sh
#!/usr/bin/env bash
# =============================================================================
#  update.sh — Git-basierter Sync für taschenmuschi-kaufen.de
# -----------------------------------------------------------------------------
#  Beidseitig nutzbar:
#    • Lokal (Dev-Maschine)  →  ./update.sh "commit message"
#         Commit lokaler Änderungen + Push zum GitHub-Remote.
#    • Server (Produktion)   →  ./update.sh
#         Pull der letzten Änderungen vom Remote.
#
#  Was wird NICHT synchronisiert:
#    Steht in .gitignore — wp-config.php, /wp-content/uploads/, Logs etc.
#    Diese Dateien bleiben unverändert, egal in welcher Richtung gesynct wird.
#
#  Optionen:
#    -m "msg"   Commit-Message (kurz für --message)
#    --pull     nur Pull, auch wenn lokale Änderungen vorliegen (Server-Default)
#    --force    bei divergierten Branches Rebase ohne Rückfrage
#    --help     diese Hilfe
#
#  Exit-Codes:
#    0  Erfolg / nichts zu tun
#    1  generischer Fehler
#    2  Konflikt — manuelle Auflösung nötig
# =============================================================================

set -euo pipefail

# Skript-Verzeichnis = Repo-Root
cd "$(dirname "$(readlink -f "$0")")"

# ---------- Optionen -----------------------------------------------------------

commit_msg=""
force_pull=0
force_rebase=0

while [[ $# -gt 0 ]]; do
    case "$1" in
        -m|--message)
            commit_msg="${2:-}"
            shift 2
            ;;
        --pull)
            force_pull=1
            shift
            ;;
        --force)
            force_rebase=1
            shift
            ;;
        --help|-h)
            sed -n '2,25p' "$0" | sed 's/^#\s\?//'
            exit 0
            ;;
        -*)
            echo "Unbekannte Option: $1" >&2
            exit 1
            ;;
        *)
            # Positionales Argument = Commit-Message
            commit_msg="$1"
            shift
            ;;
    esac
done

# ---------- Sanity-Checks ------------------------------------------------------

git rev-parse --git-dir >/dev/null 2>&1 || { echo "✘ Kein Git-Repository in $PWD"; exit 1; }

branch=$(git rev-parse --abbrev-ref HEAD)
remote_url=$(git remote get-url origin 2>/dev/null || true)
if [[ -z "$remote_url" ]]; then
    echo "✘ Kein 'origin' konfiguriert. Setup via install.sh oder:"
    echo "  git remote add origin git@github.com:<owner>/<repo>.git"
    exit 1
fi

echo "Repo:    $PWD"
echo "Branch:  $branch"
echo "Remote:  $remote_url"
echo

# ---------- Lokale Änderungen? -------------------------------------------------

has_uncommitted=0
if ! git diff --quiet || ! git diff --cached --quiet; then
    has_uncommitted=1
fi
# Untracked separat zählen — wir wollen die mit `git add -A` mitnehmen, wenn committet wird.
has_untracked=$(git ls-files --others --exclude-standard | head -1)
[[ -n "$has_untracked" ]] && has_uncommitted=1

if (( has_uncommitted )) && (( ! force_pull )); then
    if [[ -n "$commit_msg" ]]; then
        echo "→ Committe lokale Änderungen mit:  \"$commit_msg\""
        echo
        git add -A
        # Status nach Staging zeigen, dann committen.
        git status --short
        echo
        git commit -m "$commit_msg"
        echo
    else
        echo "⚠  Lokale Änderungen vorhanden, aber keine Commit-Message übergeben:"
        git status --short
        echo
        echo "  Optionen:"
        echo "    1) Mit Message committen:   ./update.sh \"deine message\""
        echo "    2) Nur Pull (Server-Modus): ./update.sh --pull"
        echo "       (uncommitted bleibt lokal — git pull --rebase --autostash sichert ab)"
        exit 1
    fi
fi

# ---------- Fetch --------------------------------------------------------------

echo "→ Fetch origin/$branch …"
git fetch --prune origin "$branch" 2>&1 | sed 's/^/  /'
echo

local_sha=$(git rev-parse HEAD)
remote_sha=$(git rev-parse "origin/$branch" 2>/dev/null || echo "")

# Remote-Branch existiert noch nicht → initialer Push.
if [[ -z "$remote_sha" ]]; then
    echo "→ Remote-Branch existiert noch nicht — initialer Push …"
    git push -u origin "$branch"
    exit 0
fi

# ---------- Sync-Entscheidung --------------------------------------------------

if [[ "$local_sha" == "$remote_sha" ]]; then
    echo "✓ Synchron — nichts zu tun."
    exit 0
fi

merge_base=$(git merge-base HEAD "origin/$branch")

if [[ "$local_sha" == "$merge_base" ]]; then
    # Wir hängen hinterher → reiner Pull.
    echo "→ Remote ist vorne — pull (fast-forward) …"
    if (( force_pull )) && (( has_uncommitted )); then
        git pull --ff-only --autostash origin "$branch"
    else
        git pull --ff-only origin "$branch"
    fi
    echo
    echo "✓ Pull abgeschlossen."

elif [[ "$remote_sha" == "$merge_base" ]]; then
    # Wir sind vorne → push.
    echo "→ Lokal ist vorne — push …"
    git push origin "$branch"
    echo
    echo "✓ Push abgeschlossen."

else
    # Beide divergiert.
    echo "⚠  Branches sind divergiert."
    echo "    local : $local_sha"
    echo "    remote: $remote_sha"
    echo "    base  : $merge_base"
    echo
    if (( ! force_rebase )); then
        read -r -p "Rebase local auf origin/$branch, dann push? [j/N] " ans
        [[ "$ans" =~ ^[jJyY]$ ]] || { echo "Abgebrochen."; exit 2; }
    fi
    git pull --rebase --autostash origin "$branch"
    git push origin "$branch"
    echo
    echo "✓ Rebase + Push abgeschlossen."
fi

Youez - 2016 - github.com/yon3zu
LinuXploit