W3docs

git remote

Erfahren Sie, wie Sie Git-Remote-Konfigurationen erstellen und bearbeiten, Remote-Repositories hinzufügen, abrufen, umbenennen und entfernen.

Was git remote macht

Ein Remote ist eine benannte Referenz auf eine andere Kopie Ihres Repositorys — in der Regel eine, die auf einem Server wie GitHub, GitLab oder Bitbucket gehostet wird. Der Befehl git remote erstellt, listet auf, benennt um und entfernt diese Verbindungen. Er überträgt selbst keine Commits; stattdessen speichert er kurze, einprägsame Namen, die auf Repository-URLs verweisen, damit die Befehle, die tatsächlich Daten verschieben — git fetch, git pull und git push — darauf verweisen können.

Stellen Sie sich einen Remote als Lesezeichen vor. Anstatt jedes Mal git push https://github.com/acme/app.git main einzutippen, speichern Sie die URL einmalig unter dem Namen origin und führen git push origin main aus. Die Zuordnung von Namen zu URLs liegt in der Datei .git/config Ihres Repositorys, sodass jeder Klon seine eigene Liste von Remotes führt.

Das folgende Diagramm zeigt zwei Remote-Verbindungen von einem lokalen Repository: eine zu einem zentralen Repository und eine zu dem Repository eines anderen Entwicklers. Da die Namen per Konvention geteilt werden, können Sie einem Teammitglied sagen, es solle „von upstream pullen", und es weiß genau, welchen Befehl es ausführen muss.

git remote

Der origin-Remote

Das Ausführen von git clone erstellt automatisch einen Remote namens origin, der auf das Repository verweist, von dem Sie geklont haben. Per Konvention ist origin „Ihre" kanonische Kopie auf dem Server — diejenige, zu der Sie täglich pushen und von der Sie täglich pullen. An dem Namen ist nichts Besonderes; er ist nur der Standard, den Git wählt, und Sie können ihn wie jeden anderen Remote umbenennen oder entfernen.

Ein gebräuchlicher zweiter Remote ist upstream. Wenn Sie ein Projekt forken, verweist origin auf Ihren Fork und upstream auf das ursprüngliche Repository, damit Sie neue Änderungen aus dem Projekt ziehen können, während Sie Ihre eigene Arbeit zu Ihrem Fork pushen.

Repository-URLs

Eine Remote-URL teilt Git mit, wo das Repository liegt und welches Transportprotokoll verwendet werden soll. Die zwei am häufigsten anzutreffenden sind HTTPS und SSH.

HTTPS ist am einfachsten einzurichten und funktioniert über Firewalls und Proxys hinweg. Öffentliche Repositories können ohne Anmeldedaten über HTTPS geklont werden; für private Repositories oder beim Pushen fordert Git einen Benutzernamen und ein persönliches Zugriffstoken an, das in der Regel von einem Credential-Helper zwischengespeichert wird.

https://host/path/to/repo.git

SSH authentifiziert sich mit einem Schlüsselpaar statt mit einem Passwort, was wiederholte Pushes bequem macht, sobald Ihr Schlüssel beim Host registriert ist. Es gibt zwei gleichwertige Formen — die vollständige ssh://-URL und die kürzere SCP-ähnliche Syntax:

ssh://user@host/path/to/repo.git
user@host:path/to/repo.git

Sie müssen sich das Format einer URL nicht merken; Sie kopieren es über die Schaltfläche „Clone" des Hosting-Anbieters. Der Befehl git remote speichert dann die von Ihnen verwendete Form.

git remote-Unterbefehle

git remote bietet mehrere Unterbefehle. Jeder bearbeitet den Remote-Abschnitt von .git/config; Sie könnten dieselben Änderungen manuell in einem Texteditor vornehmen, aber die Unterbefehle sind sicherer und aktualisieren zugehörige Einstellungen für Sie.

git remote add

Registriert einen neuen Remote namens <name>, der auf <url> verweist.

git remote add <name> <url>

Zwei nützliche Optionen:

  • -f führt sofort nach dem Erstellen des Remotes git fetch <name> aus, sodass seine Branches sofort heruntergeladen werden.
  • --tags ruft den Remote ab und importiert außerdem alle seine Tags.

git remote rename

Benennt einen Remote von <old> in <new> um und aktualisiert dabei die Remote-Tracking-Branches und alle zugehörigen Konfigurationen.

git remote rename <old> <new>

git remote remove

Löscht die Verbindung namens <name> zusammen mit ihren Remote-Tracking-Branches und Konfigurationen. git remote rm ist ein älterer Alias für denselben Befehl.

git remote remove <name>

git remote set-url

Ändert die URL, auf die ein bestehender Remote verweist — zum Beispiel, wenn Sie ein Repository von HTTPS auf SSH umstellen.

git remote set-url <name> <new-url>

git remote get-url

Gibt die URL(s) eines Remotes aus. Fügen Sie --push hinzu, um speziell die Push-URL anzuzeigen, oder --all, um alle konfigurierten URLs aufzulisten.

git remote get-url <name>

git remote show

Gibt detaillierte Informationen über einen Remote aus: seine Fetch- und Push-URLs, seine Branches und wie Ihre lokalen Branches ihn verfolgen.

git remote show <name>

git remote prune

Entfernt lokale **Remote-Tracking-**Branches für <name>, deren Gegenstücke auf dem Server gelöscht wurden. Verwenden Sie --dry-run, um aufzulisten, was bereinigt würde, ohne tatsächlich etwas zu löschen.

git remote prune <name>
Hinweis
git remote prune löscht nur veraltete Remote-Tracking-Refs (wie origin/old-feature); es berührt niemals Ihre lokalen Branches oder Daten auf dem Remote.

Remotes auflisten

Das Ausführen von git remote ohne Argumente gibt den Namen jedes konfigurierten Remotes aus, einen pro Zeile:

git remote
origin
upstream
other_repo

Fügen Sie das Flag -v (verbose) hinzu, um auch die Fetch- und Push-URLs der einzelnen Remotes anzuzeigen:

git remote -v
origin      [email protected]:origin_user/reponame.git (fetch)
origin      [email protected]:origin_user/reponame.git (push)
upstream    https://example.com/upstream_user/reponame.git (fetch)
upstream    https://example.com/upstream_user/reponame.git (push)
other_repo  https://example.com/other_repo/reponame.git (fetch)
other_repo  https://example.com/other_repo/reponame.git (push)

Ein Remote kann unterschiedliche Fetch- und Push-URLs haben — nützlich beispielsweise, wenn Sie von einem schnellen Mirror pullen, aber zum kanonischen Server pushen.

Einen Remote hinzufügen

Um mit einem anderen Repository zusammenzuarbeiten, registrieren Sie es mit git remote add. Der von Ihnen gewählte Name wird zu einem Kürzel, das Sie bei fetch, pull und push verwenden können:

git remote add upstream https://example.com/upstream_user/reponame.git

Die Verbindung zu Repositories anderer Entwickler ermöglicht die Zusammenarbeit außerhalb des zentralen Repositorys. Wenn ein Kollege zum Beispiel ein öffentlich zugängliches Repository unter dev.example.com/tom.git pflegt, fügen Sie es wie folgt hinzu und holen dann seine Arbeit ab:

git remote add tom https://dev.example.com/tom.git
git fetch tom

Einen Remote untersuchen

Der Unterbefehl show kontaktiert den Remote und gibt seine Branches und Tracking-Konfiguration aus — praktisch, wenn Sie bestätigen möchten, welcher Branch durch einen Push oder Pull aktualisiert wird:

git remote show upstream
* remote upstream
  Fetch URL: https://example.com/upstream_user/reponame.git
  Push  URL: https://example.com/upstream_user/reponame.git
  HEAD branch: main
  Remote branches:
    main      tracked
    docs      tracked
    new-input tracked
  Local ref configured for 'git push':
    main pushes to main (fast-forwardable)

Fetchen, Pullen und Pushen

Das Konfigurieren eines Remotes ist nur der Einrichtungsschritt. Sobald er vorhanden ist, übergeben Sie seinen Namen an die Befehle, die tatsächlich Commits verschieben:

  • git fetch <remote> lädt neue Commits vom Remote in Ihre Remote-Tracking-Branches herunter, ohne Ihre Arbeitsdateien zu ändern.
  • git pull <remote> <branch> ruft Änderungen ab und führt sie dann in Ihren aktuellen Branch ein (oder rebased sie).
  • git push <remote> <branch> lädt Ihre lokalen Commits zum Remote hoch.
git push <remote-name> <branch-name>

Um beispielsweise den Branch main zu origin zu veröffentlichen:

git push origin main

Wenn Sie tiefer verstehen möchten, wo diese Namen und URLs gespeichert sind, lesen Sie das Kapitel git config, das die Datei .git/config dokumentiert, die git remote bearbeitet.

Übungen

Übung
Was sind die korrekten Aussagen über den Befehl `git remote`?
Was sind die korrekten Aussagen über den Befehl `git remote`?
Was this page helpful?