update.sh: Netzprobleme nicht mehr als lokale Aenderungen ausgeben

Bisher hiess JEDER fehlgeschlagene git pull "lokale Änderungen?" - samt dem Rat,
"git checkout -- ." auszufuehren. Bei einem DNS- oder Netzausfall behebt das
nichts und wirft im schlimmsten Fall Aenderungen weg, die voellig in Ordnung
waren.

Die Ausgabe von git wird jetzt ausgewertet und die Ursache benannt: nicht
aufloesbarer Name, nicht erreichbarer Server oder tatsaechlich abweichender
lokaler Stand. Nur im letzten Fall erscheint der checkout-Hinweis. Dazu der
betroffene Rechnername und die passenden Pruefbefehle.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-09 22:11:26 +02:00
co-authored by Claude Opus 5
parent 31b3624cc7
commit a134b2aad5
+27 -4
View File
@@ -51,10 +51,33 @@ if [[ "$DO_PULL" -eq 1 ]]; then
else else
info "Hole Updates aus Git …" info "Hole Updates aus Git …"
before="$(git -C "$REPO_DIR" rev-parse --short HEAD 2>/dev/null || echo '?')" before="$(git -C "$REPO_DIR" rev-parse --short HEAD 2>/dev/null || echo '?')"
if ! git -C "$REPO_DIR" pull --ff-only; then # Die Ausgabe wird eingefangen, um die Ursache zu benennen. Frueher hiess
error "git pull fehlgeschlagen (lokale Änderungen?)." # JEDER Fehlschlag "lokale Änderungen?" – bei einem Netzproblem war der
echo " Lokalen Stand ansehen: git -C \"$REPO_DIR\" status" # Ratschlag "checkout -- ." dann nicht nur nutzlos, sondern gefaehrlich.
echo " Lokale Änderungen weg: git -C \"$REPO_DIR\" checkout -- ." if ! pull_ausgabe="$(git -C "$REPO_DIR" pull --ff-only 2>&1)"; then
printf '%s\n' "$pull_ausgabe" >&2
remote_url="$(git -C "$REPO_DIR" remote get-url origin 2>/dev/null || echo '?')"
# Nur der Rechnername aus der Adresse - den braucht die Fehlersuche.
remote_host="$(sed -E 's#^[a-z+]+://##; s#^[^/@]*@##; s#[/:].*$##' <<<"$remote_url")"
if grep -qiE 'could not resolve|name or service not known|temporary failure in name resolution' <<<"$pull_ausgabe"; then
error "Der Git-Server ist namentlich nicht auflösbar – ein DNS-Problem."
echo " Betroffen: $remote_url"
echo " Auflösung prüfen: getent hosts $remote_host"
echo " Nameserver ansehen: cat /etc/resolv.conf"
echo " Deine Dateien sind unberührt – nach dem Beheben einfach erneut starten."
elif grep -qiE 'connection refused|connection timed out|network is unreachable|failed to connect|could not read from remote|authentication failed|403 forbidden' <<<"$pull_ausgabe"; then
error "Der Git-Server ist nicht erreichbar oder verweigert den Zugriff."
echo " Betroffen: $remote_url"
echo " Deine Dateien sind unberührt – nach dem Beheben einfach erneut starten."
elif grep -qiE 'local changes|would be overwritten|commit your changes|nicht vorspulen|not possible to fast-forward|divergent' <<<"$pull_ausgabe"; then
error "git pull fehlgeschlagen – der lokale Stand weicht ab."
echo " Lokalen Stand ansehen: git -C \"$REPO_DIR\" status"
echo " Lokale Änderungen weg: git -C \"$REPO_DIR\" checkout -- ."
else
error "git pull fehlgeschlagen. Die Meldung steht oben."
echo " Lokalen Stand ansehen: git -C \"$REPO_DIR\" status"
fi
echo " Ohne Update neu bauen: ./update.sh --no-pull"
exit 1 exit 1
fi fi
after="$(git -C "$REPO_DIR" rev-parse --short HEAD)" after="$(git -C "$REPO_DIR" rev-parse --short HEAD)"