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:
co-authored by
Claude Opus 5
parent
31b3624cc7
commit
a134b2aad5
+27
-4
@@ -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)"
|
||||||
|
|||||||
Reference in New Issue
Block a user