Remarque: à partir de git 1.9 / 2.0 (Q1 2014) , git fetch --tags
récupère les balises en plus de celles récupérées par la même ligne de commande sans l'option.
Voir commit c5a84e9 par Michael Haggerty (mhagger) :
Auparavant, l' --tags
option " " de fetch était considérée comme équivalente à la spécification de la spécification de référence
refs/tags/*:refs/tags/*
sur la ligne de commande; en particulier, il a provoqué l' remote.<name>.refspec
ignorance de la configuration.
Mais il n'est pas très utile de récupérer des balises sans chercher également d'autres références, alors qu'il est très utile de pouvoir récupérer des balises en plus d' autres références.
Modifiez donc la sémantique de cette option pour faire cette dernière.
Si un utilisateur veut récupérer uniquement des balises, il est toujours possible de spécifier une spécification explicite:
git fetch <remote> 'refs/tags/*:refs/tags/*'
Veuillez noter que la documentation antérieure à 1.8.0.3 était ambiguë sur cet aspect du fetch --tags
comportement " ".
Valider f0cb2f1 (2012-12-14) a fetch --tags
fait correspondre la documentation à l'ancien comportement.
Ce commit modifie la documentation pour correspondre au nouveau comportement (voir Documentation/fetch-options.txt
).
Demander que toutes les balises soient extraites de la télécommande en plus de tout ce qui est récupéré .
Depuis Git 2.5 (Q2 2015) git pull --tags
est plus robuste:
Voir commit 19d122b par Paul Tan ( pyokagan
) , 13 mai 2015.
(Fusionné par Junio C Hamano - gitster
- dans commit cc77b99 , 22 mai 2015)
pull
: supprimer l' --tags
erreur dans aucun cas de fusion des candidats
Depuis 441ed41 (" git pull --tags
": erreur avec un meilleur message., 2007-12-28, Git 1.5.4+), afficherait git pull --tags
un message d'erreur différent s'il
git-fetch
ne renvoyait aucun candidat à la fusion:
It doesn't make sense to pull all tags; you probably meant:
git fetch --tags
C'est parce qu'à ce moment-là, git-fetch --tags
il remplacerait toutes les refspecs configurées et il n'y aurait donc pas de candidats à la fusion. Le message d'erreur a donc été introduit pour éviter toute confusion.
Cependant, depuis c5a84e9 ( fetch --tags
: récupérer les balises en plus d'
autres éléments, 2013-10-30, Git 1.9.0+), git fetch --tags
récupérerait les balises en plus de toute refspec configurée.
Par conséquent, si aucune situation de fusion des candidats ne se produit, ce n'est pas parce que--tags
été définie. En tant que tel, ce message d'erreur spécial n'est plus pertinent.
Pour éviter toute confusion, supprimez ce message d'erreur.
Avec Git 2.11+ (Q4 2016) git fetch
c'est plus rapide.
Voir commit 5827a03 (13 octobre 2016) de Jeff King ( peff
) .
(Fusionné par Junio C Hamano - gitster
- dans commit 9fcd144 , 26 oct.2016 )
fetch
: utilisez "rapide" has_sha1_file
pour le tag suivant
Lors de la récupération à partir d'une télécommande contenant de nombreuses balises non pertinentes pour les branches que nous suivons, nous gaspillions beaucoup trop de cycles lorsque nous vérifions si l'objet pointé par une balise (que nous n'allons pas chercher!) Existe dans notre référentiel trop soigneusement.
Ce correctif apprend à utiliser HAS_SHA1_QUICK pour sacrifier la précision à la vitesse, dans les cas où nous pourrions être courageux avec un reconditionnement simultané.
Voici les résultats du script perf inclus, qui configure une situation similaire à celle décrite ci-dessus:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
Cela ne s'applique que dans une situation où:
- Vous avez beaucoup de packs côté client à rendre
reprepare_packed_git()
coûteux (la partie la plus chère est de trouver des doublons dans une liste non triée, qui est actuellement quadratique).
- Vous avez besoin d'un grand nombre de références de balises côté serveur qui sont des candidats pour le suivi automatique (c'est-à-dire que le client n'a pas). Chacun déclenche une relecture du répertoire du pack.
- Dans des circonstances normales, le client suivrait automatiquement ces balises et après une extraction importante, (2) ne serait plus vrai.
Mais si ces balises pointent vers un historique déconnecté de ce que le client récupère, il ne suivra jamais automatiquement et ces candidats auront un impact sur chaque extraction.
Git 2.21 (février 2019) semble avoir introduit une régression lorsque la configuration remote.origin.fetch
n'est pas celle par défaut ( '+refs/heads/*:refs/remotes/origin/*'
)
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
Git 2.24 (Q4 2019) ajoute une autre optimisation.
Voir commit b7e2d8b (15 sept. 2019) par Masaya Suzuki ( draftcode
) .
(Fusionné par Junio C Hamano - gitster
- en commit 1d8b0df , 07 oct.2019 )
fetch
: utiliser oidset
pour conserver les OID souhaités pour une recherche plus rapide
Pendant git fetch
, le client vérifie si les OID des balises publiées sont déjà dans l'OID voulu de la demande de récupération.
Cette vérification est effectuée dans un balayage linéaire.
Pour un référentiel qui a beaucoup de références, la répétition de cette analyse prend plus de 15 minutes.
Afin d'accélérer cela, créez un oid_set
pour les OID des autres arbitres.