Est-ce git remote update
l'équivalent de git fetch
?
Réponses:
MISE À JOUR: plus d'informations!
J'aurais dû le faire depuis le début: j'ai greffé 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 less
recherche pour --all
, et c'est ce que j'ai trouvé dans les notes de publication de Git version 1.6.6 :
git fetch
appris--all
et--multiple
options, pour exécuter l'extraction à partir de nombreux référentiels, et--prune
option pour supprimer les branches de suivi à distance qui sont devenues obsolètes. Celles-ci rendentgit remote update
etgit remote prune
moins nécessaires (il n'y a pas de plan de suppressionremote 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.
Ainsi, comme vous pouvez le voir dans les notes de publication, les auteurs de Git étaient conscients du fait que la git remote update
fonctionnalité de commande était quelque peu dupliquée par git fetch
, mais ils ont décidé de ne pas la supprimer, peut-être pour des raisons de compatibilité avec les scripts et programmes existants, ou peut-être parce que c'est tout simplement trop de travail et il y a des éléments prioritaires.
Réponse originale avec plus de détails
La réponse de xenoterracide a maintenant 3,5 ans, et Git a traversé plusieurs versions depuis lors (il est passé de la v1.6.5.5 à la v1.8.3.2 au moment d'écrire ces lignes), et en regardant la documentation actuelle pour git remote update
et git fetch
, il semble comme ils peuvent tous les deux effectuer fondamentalement la même fonction de récupérer de nouveaux commits à partir de plusieurs télécommandes , avec les bonnes options et arguments.
Une façon de récupérer plusieurs télécommandes consiste à utiliser le --all
drapeau:
git fetch --all
Cela récupérera toutes vos télécommandes configurées, en supposant que vous ne les ayez pas remote.<name>.skipFetchAll
configurées:
Si true, cette télécommande sera ignorée par défaut lors de la mise à jour à l'aide de git-fetch (1) ou de la sous - commande update de git-remote (1) . - documentation git-config
Cela équivaudrait à utiliser
git remote update
sans spécifier de groupe distant à récupérer, et aussi ne pas avoir remotes.default
défini dans votre configuration de dépôt, et aussi qu'aucune de vos télécommandes n'a remote.<name>.skipDefaultUpdate
défini sur true.
La documentation 1.8.3.2 actuelle pour la configuration de Git ne mentionne pas le remotes.default
paramètre, mais j'ai consulté The Almighty Google à ce sujet et j'ai trouvé cette explication utile 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 par la
remote update
commande. Il peut s'agir de télécommandes de vos coéquipiers, de membres de la communauté de confiance d'un projet Open Source ou similaire.
Donc, vraisemblablement, si vous l'avez remotes.default
défini, et que toutes vos télécommandes ne sont pas répertoriées dans celui-ci, git remote update
elles ne récupèrent pas toutes les télécommandes dont votre dépôt est "conscient".
En ce qui concerne le remote.<name>.skipDefaultUpdate
paramètre, la documentation Git l' explique ainsi:
Si true, cette télécommande sera ignorée par défaut lors de la mise à jour à l'aide de git-fetch (1) ou de la sous - commande update de git-remote (1) .
Au lieu de récupérer toutes les télécommandes, les deux 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 faisant partie d'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 à récupérer à la fois (à partir de la documentation ):
Autoriser plusieurs
<repository>
et<group>
arguments à préciser. Non<refspec>s
peut être spécifié.
Ambiguïté dans la git remote update
documentation
Le synopsis degit remote update
spécifie 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 de fin ...
impliquent que vous pouvez spécifier plusieurs groupes et télécommandes avec la commande, ce qui signifierait 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 update
commande ne dit rien sur la spécification de plusieurs arguments de groupe et distants, seulement qu'elle
Récupérez [es] mises à jour pour un ensemble nommé de télécommandes dans le référentiel tel que défini par
remotes.<group>
.
Il n'est donc pas clair si cela git remote update
fonctionne de la même manière en git fetch --multiple
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 récupérer une seule télécommande:
git fetch <remote>
Il se peut que vous puissiez également utiliser
git remote update <remote>
pour faire la même chose, mais comme je l'ai mentionné dans la section précédente, la documentation de git remote update
ne sait pas s'il est possible de récupérer autre chose qu'un seul groupe de 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 la récupération à partir de plusieurs télécommandes. Ils partagent une syntaxe et des arguments similaires, bien quegit fetch
soient plus courts, de sorte que les gens les trouvent probablement plus faciles à taper et à utiliser.
Cela peut être le cas qui git remote update
ne peut pas être utilisé pour récupérer une seule télécommande comme avec git fetch
, mais comme je l'ai souligné, la documentation ne le précise pas.
De côté
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
, en ce sens que les deux peuvent prendre une gamme de commits pour se patcher sur un nouveau commit de base.
Je suppose qu'au fur et à mesure que Git a évolué au fil des ans, certaines fonctionnalités ont été (inévitablement?) Dupliquées, peut-être parfois par commodité pour les utilisateurs finaux (par exemple, il est plus simple de passer une plage à cherry-pick
, que de passer un seul commit encore et encore. pour choisir une plage). Apparemment, cherry-pick
n'a pas toujours accepté une gamme de commits, comme expliqué dans les notes de publication de la v1.7.2 :
git cherry-pick
appris à choisir une gamme de commits (par exemplecherry-pick A..B
etcherry-pick --stdin
), ainsi faitgit revert
; cependant, ceux-ci ne prennent pas en charge le meilleur contrôle de séquençagerebase [-i]
.
Oui et non. git remote update
récupère toutes les télécommandes, pas une seule.
Sans regarder le code pour voir si remote update
c'est juste un script shell (possible), il exécute essentiellement fetch pour chaque télécommande. git fetch
peut être beaucoup plus granulaire.
git remote update
, voir la page de manuel git-remote.
git remote
n'est pas un script shell, mais il apparaît git fetch
pendant un remote update
.
git fetch
options de commande équivalentes pour a git remote update
?
git fetch --all
git rebase
est commemv
etgit cherry-pick
est commecp
. Le--onto
commutateur ne change rien à cela. Vous pouvez obtenir un effet de copie avecgit rebase
seulement si vous spécifiez des valeurs SHA1, sinon votre branche sera déplacée!