Hinweis: Ab Git 1.9 / 2.0 (Q1 2014) werden git fetch --tags
Tags zusätzlich zu dem abgerufen , was von derselben Befehlszeile ohne die Option abgerufen wird.
Siehe Commit c5a84e9 von Michael Haggerty (mhagger) :
Bisher wurde die --tags
Option " " von fetch als gleichwertig mit der Angabe der Referenzspezifikation angesehen
refs/tags/*:refs/tags/*
in der Kommandozeile; Insbesondere wurde die remote.<name>.refspec
Konfiguration ignoriert.
Aber es ist nicht sehr nützlich , um Tags zu holen , ohne auch andere Referenzen zu holen, während es ist sehr nützlich , die Lage sein , um Tags zu holen , um zusätzlich andere Referenzen.
Ändern Sie also die Semantik dieser Option, um Letzteres zu tun.
Wenn ein Benutzer nur Tags abrufen möchte , kann weiterhin eine explizite Referenz angegeben werden:
git fetch <remote> 'refs/tags/*:refs/tags/*'
Bitte beachten Sie, dass die Dokumentation vor 1.8.0.3 in Bezug auf diesen Aspekt des " fetch --tags
" Verhaltens nicht eindeutig war .
Mit Commit f0cb2f1 (14.12.2012) fetch --tags
wurde die Dokumentation an das alte Verhalten angepasst .
Durch dieses Festschreiben wird die Dokumentation an das neue Verhalten angepasst (siehe Documentation/fetch-options.txt
).
Fordern Sie an, dass alle Tags zusätzlich zu den anderen abgerufenen Tags von der Fernbedienung abgerufen werden .
Seit Git 2.5 (Q2 2015) git pull --tags
ist robuster:
Siehe Commit 19d122b von Paul Tan ( pyokagan
) , 13. Mai 2015.
(Zusammengeführt von Junio C Hamano - gitster
- in Commit cc77b99 , 22. Mai 2015)
pull
: --tags
Fehler in keinem Fall von Zusammenführungskandidaten entfernen
Da 441ed41 (" git pull --tags
": Fehler mit einer besseren Nachricht., 2007-12-28, Git 1.5.4+) git pull --tags
eine andere Fehlermeldung drucken würde, wenn
git-fetch
keine Zusammenführungskandidaten zurückgegeben würden:
It doesn't make sense to pull all tags; you probably meant:
git fetch --tags
Dies liegt daran, dass zu diesem Zeitpunkt git-fetch --tags
alle konfigurierten Referenzspezifikationen überschrieben würden und daher keine Zusammenführungskandidaten vorhanden wären. Die Fehlermeldung wurde daher eingeführt, um Verwirrung zu vermeiden.
Da c5a84e9 ( fetch --tags
: Tags zusätzlich zu
anderen Dingen abrufen, 30.10.2013, Git 1.9.0+) git fetch --tags
Tags zusätzlich zu konfigurierten Referenzspezifikationen abrufen würde.
Wenn also keine Situation für Zusammenführungskandidaten auftritt, liegt dies nicht daran, dass diese --tags
festgelegt wurde. Daher ist diese spezielle Fehlermeldung jetzt irrelevant.
Entfernen Sie diese Fehlermeldung, um Verwirrung zu vermeiden.
Mit Git 2.11+ (Q4 2016) git fetch
geht es schneller.
Siehe Commit 5827a03 (13. Oktober 2016) von Jeff King ( peff
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 9fcd144 , 26. Oktober 2016)
fetch
: Verwenden Sie "quick" has_sha1_file
für das Folgen von Tags
Beim Abrufen von einer Fernbedienung mit vielen Tags, die für die von uns verfolgten Zweige nicht relevant sind, haben wir viel zu viele Zyklen verschwendet, um zu überprüfen, ob das Objekt, auf das ein Tag zeigt (das wir nicht abrufen werden!), In unserem Repository vorhanden ist zu vorsichtig.
Dieser Patch lehrt Fetch, HAS_SHA1_QUICK zu verwenden, um die Genauigkeit für die Geschwindigkeit zu opfern, in Fällen, in denen wir bei gleichzeitigem Umpacken möglicherweise rassig sind.
Hier sind die Ergebnisse des enthaltenen Perf-Skripts, das eine ähnliche Situation wie die oben beschriebene herstellt:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
Dies gilt nur für eine Situation, in der:
- Auf der Client-Seite müssen viele Pakete
reprepare_packed_git()
teuer gemacht werden (der teuerste Teil besteht darin, Duplikate in einer unsortierten Liste zu finden, die derzeit quadratisch ist).
- Sie benötigen eine große Anzahl von Tag-Refs auf der Serverseite, die Kandidaten für die automatische Verfolgung sind (dh die der Client nicht hat). Jeder löst ein erneutes Lesen des Packverzeichnisses aus.
- Unter normalen Umständen würde der Client diesen Tags automatisch folgen und nach einem großen Abruf wäre (2) nicht mehr wahr.
Wenn diese Tags jedoch auf den Verlauf verweisen, der von dem, was der Client sonst abruft, getrennt ist, folgt er niemals automatisch, und diese Kandidaten wirken sich bei jedem Abruf darauf aus.
Git 2,21 (Februar 2019) scheint eine Regression eingeführt zu haben , wenn die Konfiguration remote.origin.fetch
ist nicht der Standard ein ( '+refs/heads/*:refs/remotes/origin/*'
)
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
Git 2.24 (Q4 2019) fügt eine weitere Optimierung hinzu.
Siehe Commit b7e2d8b (15. September 2019) von Masaya Suzuki ( draftcode
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 1d8b0df , 07. Oktober 2019)
fetch
: Verwenden Sie oidset
diese Option, um die gewünschten OIDs für eine schnellere Suche beizubehalten
Währenddessen git fetch
prüft der Client, ob die OIDs der angekündigten Tags bereits in der gewünschten OID der Abrufanforderung enthalten sind.
Diese Überprüfung erfolgt in einem linearen Scan.
Bei einem Repository mit vielen Refs dauert das Wiederholen dieses Scans mehr als 15 Minuten.
Um dies zu beschleunigen, erstellen Sie eine oid_set
OID für andere Refs.