174 votes

Différences entre la mise à jour à distance de git et la récupération?

Est-ce que git remote update équivaut à git fetch ?

141voto

xenoterracide Points 2557

Oui et non. git remote update récupère de toutes les télécommandes, pas une seule.

Sans regarder le code pour voir si remote update est juste un script shell (possible), il exécute essentiellement une extraction pour chaque télécommande. git fetch peuvent être beaucoup plus granulaires.

104voto

Cupcake Points 22154

Mise à JOUR: plus d'informations!

J'aurais dû faire ça dès le début: je grepped le Git notes de version de Git Git du repo (sorte de méta!)

grep --color=always -R -C30 fetch Documentation/RelNotes/* | less

Puis j'ai fait une less recherche --all, et c'est ce que j'ai trouvé sous les notes de version Git version 1.6.6:

git fetch apprises --all et --multiple options, pour courir chercher de nombreux référentiels, et --prune option de suppression de suivi à distance des branches qui sont allés vicié. Celles - git remote update et git remote prune moins nécessaire (il n'y a pas de plan pour supprimer remote update ni remote prune, tout de même).

La Version 1.6.6 n'était pas libéré jusqu'à ce que le 23 décembre 2009, et l'Affiche Originale a demandé à sa question sur le 6 décembre 2009.

Donc, comme vous pouvez le voir dans les notes de publication, les auteurs de Git étaient conscients du fait que l' git remote update fonctionnalité de commande a été dupliqué un peu en git fetch, mais ils ont décidé de ne pas l'enlever, peut-être pour la rétro-compatibilité avec les scripts et programmes, ou peut-être parce que c'est juste trop de travail et il y a des éléments prioritaires.


Réponse originale à cette question avec plus de détails

xenoterracide de réponse est de 3,5 ans maintenant, et Git a connu plusieurs versions depuis (il a disparu à partir de v1.6.5.5 pour v1.8.3.2 de cette écriture), et en regardant le courant de la documentation pour git remote update et git fetch, on dirait qu'ils les deux peuvent effectuer essentiellement la même fonction, celle d'aller chercher de nouvelles validations à partir de plusieurs télécommandes, étant donné les bonnes options et arguments.

Récupération de toutes les télécommandes

Un moyen de récupérer les multiples télécommandes est avec l' --all drapeau:

git fetch --all

Cela permettra d'extraire de l'ensemble de votre configuration de télécommandes, en supposant que vous n'avez pas d' remote.<name>.skipFetchAll ensemble pour:

Si la valeur est true, cette distance sera ignoré par défaut lors de la mise à jour à l'aide de git-fetch(1) ou de la mise à jour sous-commande de git-à distance(1). — git-la documentation de la configuration

Ce serait l'équivalent de l'aide

git remote update

sans préciser à distance de votre groupe pour aller chercher, et aussi de ne pas avoir remotes.default ensemble de vos pensions de configuration, et aussi qu'aucun de vos télécommandes ont remote.<name>.skipDefaultUpdate la valeur true.

L' actuel 1.8.3.2 documentation pour Git de configuration ne parle pas de l' remotes.default , mais j'ai consulté Le tout-Puissant Google à ce sujet et a trouvé ce utile explication de Mislav Marohnić:

$ git config remotes.default 'origin mislav staging'
$ git remote update

# fetches remotes "origin", "mislav", and "staging"

Vous pouvez définir une valeur par défaut de la liste de télécommandes pour être récupérée par l' remote update commande. Ceux-ci peuvent être télécommandes de vos coéquipiers, de confiance des membres de la communauté d'un projet opensource, ou similaire.

Donc, a priori, si vous avez remotes.default , et non l'ensemble de vos télécommandes sont répertoriés, git remote update de ne pas récupérer toutes les télécommandes de votre dépôt est "conscient" de.

Comme pour l' remote.<name>.skipDefaultUpdate réglage, le Git docs de l'expliquer ainsi:

Si la valeur est true, cette distance sera ignoré par défaut lors de la mise à jour à l'aide de git-fetch(1) ou de la mise à jour sous-commande de git-à distance(1).

L'extraction d'un ensemble de télécommandes

Au lieu de chercher toutes les télécommandes, les deux fetch et remote update vous permettent de spécifier de multiples éloignés et les groupes de télécommandes pour récupérer:

git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]

git fetch [<options>] <group> vous permet d'extraire plusieurs télécommandes qui font partie d'un groupe (pour reprendre un autre exemple de Mislav):

$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup

git fetch --multiple vous permet de spécifier plusieurs référentiels référentiel et de groupes pour récupérer à la fois (à partir de la documentation):

De permettre à plusieurs <repository> et <group> arguments pour être spécifiée. Pas de <refspec>s peut être spécifié.

L'ambiguïté git remote update documentation

Le synopsis d' git remote update indique que la commande syntaxe est comme suit:

git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]

Avis de la dernière partie, [(<group> | <remote>)…]? La fuite des points ... implique que vous pouvez spécifier plusieurs groupes et les télécommandes avec la commande, ce qui signifie qu'il se comporte de la même manière qu' git fetch --multiple...voir comment la syntaxe entre les deux est si semblable?

Cependant, dans le même document, l'explication de l' update commande ne dit rien sur la spécification de plusieurs groupe et à distance des arguments, mais seulement qu'il

Fetch[es] mise à 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 la même manière à l' git fetch --multiple quant à la spécification de chacun des multiples éloignés et à distance multiples groupes.

L'extraction d'une seule télécommande

Enfin, tout le monde sait que le simple cas de l'extraction d'une seule télécommande:

git fetch <remote>

Cela pourrait ê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 de git remote update n'est pas claire quant à savoir si il est possible de chercher autre chose qu'un seul groupe de télécommandes avec la commande.

Wrapup

Comme je l'ai expliqué, git fetch et git remote update comportent de la même façon à l'égard de l'extraction à partir de plusieurs télécommandes. Ils partagent la même syntaxe et les arguments, bien qu' git fetch est plus courte, de sorte que les gens probablement plus facile à taper et à utiliser.

Il peut être le cas qu' git remote update ne peut pas être utilisé pour récupérer juste une seule télécommande comme avec git fetch, mais comme je l'ai souligné, la documentation n'est pas claire à ce sujet.

Côté

La duplication de fonctionnalités entre Git porcelaine commandes, illustré par git fetch et git remote update - dessus, n'est pas unique. J'ai remarqué une situation similaire avec git rebase --onto et git cherry-pick, cela permet de prendre une série de commits de patch sur une nouvelle base de commettre.

Je suppose que comme Git a évolué au fil des ans, certaines fonctionnalités (inévitablement?) dupliqué, peut-être parfois à titre de commodité pour les utilisateurs finaux (par exemple, il est plus simple de passer d'une gamme à l' cherry-pick, que pour passer un seul commettre encore et encore choisir une fourchette). Apparemment cherry-pick n'a pas toujours accepter une gamme de commet, comme expliqué dans la v1.7.Notes de version 2:

git cherry-pick appris à sélectionner une gamme de commits (par exemple, cherry-pick A..B et cherry-pick --stdin), alors n' git revert; elles ne prennent pas en charge le plus beau de séquençage de contrôle rebase [-i] a, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X