Wenn Sie möchten, dass die Spitzen des lokalen Zweigs nach git fetch
neu ausgerichtet werden, sind einige zusätzliche Schritte erforderlich.
Genauer gesagt, angenommen, das GitHub-Repository hat die Branches D
, B
, C
und master
(der Grund für diesen ungewöhnlichen Branch-Namen wird in einem Moment klar). Sie befinden sich auf dem Host devhost
und befinden sich in einem Repository, in dem origin
das GitHub-Repository ist. Sie führen git fetch
aus, das alle Objekte mitbringt und origin/D
, origin/B
, origin/C
und origin/master
aktualisiert. Bisher so gut. Aber was möchten Sie nun, dass auf devhost
mit den lokalen Branches D
, B
, C
und/oder master
passiert?
Ich habe diese offensichtlich (in meinen Augen) Fragen:
- Warum möchten Sie, dass die Spitzen aller Branches aktualisiert werden?
- Was ist, wenn ein Branch (z. B.
B
) Commits enthält, die im entfernten (GitHub-)Repository fehlen? Sollten sie gemergt, rebased oder ... werden?
- Was ist, wenn Sie sich auf einem Branch befinden (z. B.
C
) und das Arbeitsverzeichnis und/oder der Index modifiziert, aber nicht committet sind?
- Was ist, wenn dem entfernten Repository neue Branches hinzugefügt werden (
A
) und/oder Branches gelöscht werden (D
)?
Wenn die Antwort auf (1) lautet "weil devhost
eigentlich nicht für die Entwicklung gedacht ist, sondern vielmehr ein lokaler Spiegel ist, der einfach eine lokal verfügbare Kopie des GitHub-Repositorys aufbewahrt, damit alle unsere tatsächlichen Entwickler schnell davon lesen können, anstatt langsam von GitHub zu lesen", dann möchten Sie einen "Spiegel" anstelle eines "normalen" Repositories. Es sollte kein Arbeitsverzeichnis haben und möglicherweise auch keine Pushes akzeptieren, in diesem Fall erledigen sich die restlichen Fragen einfach.
Wenn es eine andere Antwort gibt, werden die Fragen (2-4) problematisch.
In jedem Fall gibt es eine Möglichkeit, lokale Verweise basierend auf entfernten Verweisen zu aktualisieren (nachdem beispielsweise git fetch -p
ausgeführt wurde):
für ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
lokal=${ref#refs/remotes/origin/}
... Code hier ...
done
Was in den Abschnitt ... Code hier ...
gehört, hängt von den Antworten auf die Fragen (2-4) ab.