Est git remote update
l'équivalent de git fetch
?
UPDATE: plus d'informations!
J'aurais dû le faire depuis le début: j'ai salué les notes de publication de Git dans le dépôt Git de Git (donc méta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Ensuite, j'ai fait une recherche less
pour --all
, Et voici ce que j'ai trouvé dans les notes de publication de Git version 1.6.6 :
git fetch
A appris les options--all
Et--multiple
, Pour exécuter l'extraction depuis de nombreux référentiels, et l'option--Prune
Pour supprimer les branches de suivi distantes devenues obsolètes. Celles-ci font quegit remote update
Etgit remote Prune
Sont moins nécessaires (il n'y a aucun plan pour supprimerremote update
Niremote Prune
, Cependant).
La version 1.6.6 n'est sortie que le 23 décembre 2009 , et l'affiche originale a posé sa question le 6 décembre 2009.
Comme vous pouvez le voir dans les notes de publication, les auteurs de Git étaient conscients du fait que la fonctionnalité de commande git remote update
Était en quelque sorte dupliquée par git fetch
, Mais ils ont décidé de ne pas la supprimer, peut-être. pour la compatibilité ascendante avec les scripts et les programmes existants, ou peut-être parce que c'est trop de travail et qu'il y a des éléments de priorité plus élevés.
Réponse originale avec plus de détails
La réponse de xenoterracide a maintenant 3,5 ans et Git a passé plusieurs versions depuis (elle est passée de v1.6.5.5 à la v1.8.3.2 à la date de rédaction de ce document), et en regardant la documentation actuelle pour git remote update
et git fetch
, on dirait qu'ils both peut effectuer essentiellement la même fonction d'extraction de nouveaux commits à partir de plusieurs télécommandes, avec les bonnes options et les bons arguments.
L’une des méthodes permettant d’extraire plusieurs télécommandes consiste à utiliser l’option --all
:
git fetch --all
Cela ira de toutes vos télécommandes configurées, en supposant que vous n’ayez pas réglé remote.<name>.skipFetchAll
Pour elles:
Si true, cette télécommande sera ignorée par défaut lors de la mise à jour avec git-fetch (1) ou la sous-commande update de git-remote (1) . - documentation git-config
Cela équivaudrait à utiliser
git remote update
sans spécifier aucun groupe distant à extraire, ni aussi que remotes.default
soit défini dans votre configuration de référentiel, et qu'aucune de vos télécommandes ne possède remote.<name>.skipDefaultUpdate
définie sur true.
La documentation actuelle 1.8.3.2 de la configuration de Git ne mentionne pas le paramètre remotes.default
, Mais j'ai consulté le tout-puissant Google et trouvé cette explication utile provenant de Mislav Marohnić :
$ git config remotes.default 'Origin mislav staging'
$ git remote update
# fetches remotes "Origin", "mislav", and "staging"
Vous pouvez définir une liste par défaut de télécommandes à récupérer avec la commande
remote update
. Ceux-ci peuvent être des télécommandes de vos coéquipiers, des membres de la communauté de confiance d'un projet opensource ou similaire.
Donc, vraisemblablement, si remotes.default
Est défini et que toutes vos télécommandes ne sont pas répertoriées, alors git remote update
Ne récupérera pas toutes les télécommandes dont votre référant est "conscient".
En ce qui concerne le paramètre remote.<name>.skipDefaultUpdate
, , les documents Git l'expliquent comme suit:
Si true, cette télécommande sera ignorée par défaut lors de la mise à jour avec git-fetch (1) ou la sous-commande update de git-remote (1) .
Au lieu de récupérer toutes les télécommandes, fetch
et remote update
Vous permettent de spécifier plusieurs télécommandes et groupes de télécommandes à récupérer:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
Vous permet de récupérer plusieurs télécommandes appartenant à un groupe (pour emprunter un autre exemple à Mislav ):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
Vous permet de spécifier plusieurs référentiels et groupes de référentiels à extraire simultanément (à partir de les documents ):
Autorise la spécification de plusieurs arguments
<repository>
Et<group>
. Aucun<refspec>s
Ne peut être spécifié.
Ambiguïté dans la documentation de git remote update
Le synopsis pour git remote update
indique que la syntaxe de la commande est la suivante:
git remote [-v | --verbose] update [-p | --Prune] [(<group> | <remote>)…]
Remarquez la dernière partie, [(<group> | <remote>)…]
? Les points finaux ...
Impliquent que vous pouvez spécifier plusieurs groupes et télécommandes avec la commande, ce qui voudrait dire qu'elle se comporte de la même manière que git fetch --multiple
... voyez comment la syntaxe entre les deux est si similaire?
Cependant, dans le même document, l’explication de la commande update
ne dit rien sur la spécification de plusieurs arguments de groupe et à distance, mais seulement
Récupérer [es] mises à jour pour un ensemble nommé de télécommandes dans le référentiel tel que défini par
remotes.<group>
.
Il est donc difficile de savoir si git remote update
Fonctionne de manière identique à git fetch --multiple
En ce qui concerne la spécification de plusieurs télécommandes individuelles et de plusieurs groupes distants.
Enfin, tout le monde connaît le cas simple de chercher une seule télécommande:
git fetch <remote>
Il se peut que vous puissiez également utiliser
git remote update <remote>
faire la même chose, mais comme je l’ai mentionné dans la section précédente, la documentation de git remote update
ne permet pas de savoir s’il est possible d’extraire autre chose qu’un simple group des télécommandes avec la commande.
Comme je l'ai expliqué, git fetch
Et git remote update
Se comportent de la même manière en ce qui concerne l'extraction de plusieurs télécommandes. Ils partagent la même syntaxe et les mêmes arguments, même si git fetch
Est plus court, de sorte que les gens trouvent probablement plus facile à taper et à utiliser.
Il se peut que git remote update
Ne puisse pas être utilisé pour extraire une seule télécommande, comme avec git fetch
, Mais comme je l’ai indiqué, la documentation ne le dit pas clairement.
À part
La duplication des fonctionnalités entre les commandes de porcelaine Git, illustrée par git fetch
Et git remote update
Ci-dessus, n'est pas unique. J'ai remarqué une situation similaire avec git rebase --onto
et git cherry-pick
, dans la mesure où les deux peuvent prenez une série de commits pour appliquer un nouveau commit de base.
Je suppose que Git ayant évolué au fil des ans, certaines fonctionnalités ont été (inévitablement?) Dupliquées, peut-être parfois pour la commodité des utilisateurs finaux (par exemple, il est plus simple de passer une plage à cherry-pick
, Que de passer une seule validation encore et encore pour choisir une plage). Apparemment, cherry-pick
N'a pas toujours accepté une plage de validations, comme expliqué dans les notes de version v1.7.2 :
git cherry-pick
A appris à choisir une plage de commits (par exemple,cherry-pick A..B
Etcherry-pick --stdin
), De même quegit revert
; ceux-ci ne supportent pas le meilleur contrôle de séquençagerebase [-i]
, cependant.
Oui et non. git remote update
va chercher dans toutes les télécommandes, pas seulement une.
Sans regarder le code pour voir si remote update
n'est qu'un script Shell (possible), il exécute la récupération pour chaque télécommande. git fetch
peut être beaucoup plus granulaire.