Les différences entre git mise à jour à distance et chercher?
-
13-09-2019 - |
Question
est git remote update
l'équivalent de git fetch
?
La solution
Mise à jour: plus d'informations
Je l'ai fait depuis le début: (! Si meta) Je les notes rassemblés de libération Git dans le repo Git Git
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Alors je fait une recherche de less
pour --all
, et ce que j'ai trouvé sous la notes de version pour la version Git 1.6.6 :
git fetch
appris options--all
et--multiple
, pour exécuter rapportez de nombreux référentiels et option--prune
pour enlever les branches de suivi à distance qui sont allés rassis. Ceux-ci fontgit remote update
etgit remote prune
moins nécessaire (il n'y a pas de plan pour enleverremote update
niremote prune
, cependant).
Version 1.6.6 n'a pas été libéré jusqu'à ce que Décembre 23, 2009 , et l'affiche originale a posé sa question le 6 Décembre 2009.
Comme vous pouvez le voir dans les notes de version, les auteurs de Git étaient au courant du fait que la fonctionnalité de commande git remote update
était dupliqué un peu par git fetch
, mais ils ont décidé de ne pas l'enlever, peut-être pour la compatibilité avec les scripts existants et programmes, ou peut-être parce qu'il est tout simplement trop de travail et il y a des éléments prioritaires.
Réponse originale avec plus de détails
réponse de xenoterracide est de 3,5 ans maintenant, et Git a connu plusieurs versions depuis lors (il est passé de git remote update
et git fetch
noreferrer, on dirait qu'ils les deux peuvent effectuer essentiellement la même fonction d'aller chercher de nouveaux commits de plusieurs télécommandes , étant donné les bonnes options et arguments.
Récupération de toutes les télécommandes
Une façon de chercher plusieurs télécommandes est avec le drapeau de --all
:
git fetch --all
Cela ira chercher de toutes vos télécommandes configurées, en supposant que vous ne disposez pas de jeu remote.<name>.skipFetchAll
pour eux:
Si cela est vrai, cette télécommande est ignorée par défaut lors de la mise à jour en utilisant -git fetch (1) ou la sous-commande de mise à jour de git-distance (1) . - documentation-config git
Cela équivaudrait à utiliser
git remote update
sans spécifier de groupe à distance pour aller chercher, et aussi de ne pas avoir de jeu remotes.default
dans votre configuration de prise en pension, et que aucun de vos télécommandes ont remote.<name>.skipDefaultUpdate
la valeur true.
documentation actuelle 1.8.3.2 pour la configuration de Git ne mentionne pas le paramètre remotes.default
, mais je consulté le Tout-Puissant Google à ce sujet et trouvé cela utile explanation de Mislav Marohnic :
$ 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 des télécommandes à extraire par la commande
remote update
. Ceux-ci peuvent être de vos coéquipiers Distants, membres de la communauté de confiance d'un projet opensource, ou similaire.
On peut donc supposer, si vous avez ensemble remotes.default
, et non toutes vos télécommandes sont répertoriés dans, puis git remote update
ne récupère pas toutes les télécommandes que votre pension est « au courant » de.
En ce qui concerne le réglage de remote.<name>.skipDefaultUpdate
, la documentation Git expliquent ainsi:
Si cela est vrai, cette télécommande est ignorée par défaut lors de la mise à jour en utilisant -git fetch (1) ou la sous-commande de mise à jour de git-distance (1) .
Récupérer un groupe spécifié de télécommandes
Au lieu d'aller chercher 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 chercher:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
vous permet d'aller chercher plusieurs télécommandes qui font 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 des groupes de référentiel pour aller chercher à la fois ( les docs ):
Permettre plusieurs arguments de
<repository>
et<group>
à préciser. Aucune<refspec>s
peut être spécifié.
Ambiguïté dans la documentation git remote update
Le à distance pour git remote update
précise que la syntaxe de commande est la suivante:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Remarquez la dernière partie, [(<group> | <remote>)…]
? Les points de suivi ...
implique que vous pouvez spécifier plusieurs groupes et DCD avec la commande, ce qui voudrait dire qu'il se comporte de la même manière que git fetch --multiple
... voir comment la syntaxe entre les deux est si semblable?
Cependant, dans le même document, l'explication de la commande update
ne dit rien sur la spécification groupe et plusieurs arguments à distance, mais seulement qu'il
Fetch [es] pour les mises à jour 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 plusieurs groupes distants.
Récupérer une seule télécommande
Enfin, tout le monde connaît le cas simple d'aller chercher une seule télécommande:
git fetch <remote>
Il est peut-être le cas que vous pouvez é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 git remote update
ne sait pas de savoir s'il est possible d'aller chercher autre chose qu'un simple groupe de télécommandes avec la commande.
Wrapup
Comme je l'ai expliqué, git fetch
et git remote update
se comportent de la même en ce qui concerne l'extraction de plusieurs télécommandes. Ils partagent la même syntaxe et les arguments, bien que git fetch
est plus courte, doncles gens trouvent probablement plus facile à taper et à utiliser.
Il peut être le cas que git remote update
ne peut pas être utilisé pour aller chercher juste une seule télécommande comme avec git fetch
, mais comme je l'ai fait remarquer, la documentation ne fait pas clairement.
Mis
La duplication de fonctionnalité entre les commandes de porcelaine Git, illustré par git fetch
et git remote update
ci-dessus, ne sont pas uniques. Je l'ai remarqué une situation similaire avec git rebase --onto
et git cherry-pick
dans la mesure où les deux peuvent prendre une série de commits patcher sur un commit base.
Je suppose que Git a évolué au fil des années, certaines fonctionnalités était (forcément?) En double, peut-être parfois à titre de commodité pour les utilisateurs finaux (par exemple, il est plus simple de passer une gamme de cherry-pick
, que de passer un engager encore et de choisir une plage). Apparemment cherry-pick
ne pas toujours accepter une gamme de commits, comme expliqué dans la section communiqué de v1.7.2 note :
git cherry-pick
appris à choisir une gamme de commits (par exemplecherry-pick A..B
etcherry-pick --stdin
), donc a faitgit revert
; ceux-ci ne prennent pas en charge a, bien que lerebase [-i]
plus agréable de contrôle de séquençage.
Autres conseils
Oui et non. git remote update
va chercher de toutes les télécommandes, pas seulement un.
Sans regarder le code pour voir si remote update
est juste un script shell (possible) il, au fond, pour chaque court chercher à distance. git fetch
peut être beaucoup plus granulaire.