Einführung
Ein Remote ist eine benannte URL, die auf ein anderes Git-Repository verweist. git clone erstellt automatisch einen namens origin, aber Sie können beliebig viele hinzufügen. Remotes sind die Brücke zwischen Ihrem lokalen Repository und der Außenwelt.
Auflisten und inspizieren
git remote
git remote -v
git remote show origin
git remote show kontaktiert den Server und meldet getrackte Branches, Push-Regeln und veraltete Refs.
Hinzufügen und entfernen
git remote add upstream https://github.com/original/widget.git
git remote rename upstream origin-upstream
git remote remove origin-upstream
Das Fork-and-Upstream-Muster ist üblich: origin ist Ihr Fork, upstream ist das Projekt, von dem Sie geforkt haben.
Eine URL ändern
Wenn ein Projekt von HTTPS auf SSH oder zu einem neuen Host umzieht:
git remote set-url origin [email protected]:example/widget.git
git remote -v
Mehrere URLs
Sie können auf mehrere Mirrors gleichzeitig pushen, indem Sie zusätzliche Push-URLs hinzufügen:
git remote set-url --add --push origin [email protected]:example/widget.git
git remote -v
Veraltete Branches aufräumen
Wenn Branches auf dem Server gelöscht werden, können Ihre lokalen refs/remotes/origin/* hinterherhinken. Räumen Sie sie auf:
git fetch --prune
git remote prune origin
Oder dauerhaft setzen:
git config --global fetch.prune true
Tracking inspizieren
git branch -vv
# main a1b2c3d [origin/main] Latest fix
# feature/login e4f5g6h [origin/feature/login: ahead 2] WIP
-vv zeigt das Upstream jedes Branches und wie weit voraus/zurück er liegt.
insteadOf-Umschreibung
Wenn sich URLs eines Projekts ändern (HTTPS zu SSH, Host-Migration, oder wenn Sie wollen, dass alle GitHub-URLs automatisch SSH verwenden), schreibt insteadOf sie transparent um:
git config --global url."[email protected]:".insteadOf "https://github.com/"
git config --global url."https://github-mirror.example.com/".insteadOf "https://github.com/"
Dies ist besonders praktisch in CI, wo Sie alle Klone mit einer einzigen Konfigurationszeile auf einen lokalen Mirror umschreiben können, ohne Skripte zu bearbeiten. Die umgekehrte Richtung (pushInsteadOf) erlaubt Ihnen, vom selben Remote über HTTPS zu fetchen, aber über SSH zu pushen.
Triangulare Workflows
Im Open Source fetchen Sie typischerweise von upstream (dem kanonischen Projekt) und pushen auf origin (Ihren persönlichen Fork). Einmal konfigurieren und vergessen:
git remote add upstream https://github.com/project/repo.git
git config branch.main.remote upstream
git config branch.main.pushRemote origin
git config --global push.default current
Nun liest git pull automatisch von upstream und git push schreibt auf Ihren Fork. Die Einstellung remote.pushDefault wendet die Regel auf jeden Branch in einem Klon an.
Häufige Fehler
Den Namen eines Remotes mit seiner URL verwechseln. origin ist nur ein Label; Sie können es umbenennen. Eine weitere Falle: dieselbe URL unter zwei verschiedenen Namen hinzufügen und dann von doppelten Refs überrascht werden. Verwenden Sie git remote -v zur Überprüfung. Vergessen, git fetch nach einem Netzwerkwechsel oder URL-Änderung auszuführen, lässt Ihre Tracking-Branches veralten. Schließlich: Auf gemeinsam genutzten Servern löscht das lokale Löschen einer Remote-Tracking-Ref (z. B. git branch -dr origin/main) den Branch nicht auf dem Server; verwenden Sie dafür git push origin --delete main, und nur dann, wenn Sie es wirklich meinen.