web-dev-qa-db-fra.com

Quelle est la différence entre les commandes 'Origin' et 'remote' in git?

Dans git jargon, Origin et remote sont-ils la même chose? Ou bien Origin fait-il référence au répertoire local?

Dans le cas de git Push -u Origin master: Laquelle des interprétations suivantes est correcte?

  1. "Tout pousser en amont vers le dépôt distant appelé" Origin "et sa branche" maître ""
  2. "Poussez tout depuis le dépôt d'origine local appelé 'Origin' vers la branche 'maître' en amont"

Appréciez toute clarification!

Les réponses à ma question ont clarifié deux points pour moi:

  1. Origin fait référence au référentiel distant, plutôt qu'à la copie clonée locale du référentiel distant. Ce n’est pas clair quand on lit que Originest un alias de remote et est créé à l’époque de git clone
  2. Origin fait référence au dépôt distant dans git Push -u Origin master _ parce que les copies locales du référentiel sont impliquées et "rarement référencées".
60
YCode

Dans git lingo, Origin n'est que le nom par défaut d'une télécommande à partir de laquelle un référentiel a été cloné à l'origine. Il aurait également pu s'appeler source ou remote1 ou simplement remote.

Rappelez-vous que git est un système distribué peer-to-peer, et non un système avec une notion intégrée de relations client/serveur, maître/esclave, parent/enfant (bien que celles-ci puissent lui être imposées par un utilisateur dans un scénario particulier).

Toutes les télécommandes sont égales. Origin est simplement (et littéralement) le premier parmi ces égaux (pour un référentiel cloné). :)

Et comme le souligne Jan dans les commentaires, le nom associé à chaque télécommande est destiné à votre commodité. Si vous trouvez que Origin ne fonctionne pas vraiment pour vous, vous pouvez le changer.

En ce qui concerne vos interprétations de l'instruction Push, votre première est la plus proche de l'exactitude, mais la commande Push telle qu'elle est écrite poussera la branche locale master vers la branche master de la distant identifié par le nom (configuré localement) Origin.

S'il n'y a pas de branche master dans la télécommande, elle sera créée.

Les détails complets de la commande Push et des drapeaux, options, etc. sont bien sûr dans la documentation .

Vous vous référez rarement (voire jamais) au référentiel "local", car vos opérations sont effectuées dans le contexte d'un référentiel.

61
Deltics

Non, ils ne veulent pas dire la même chose.

remote, dans git- speak, fait référence à un référentiel distant, tel que votre GitHub ou un autre serveur git.

Origin est, par convention, le nom distant par défaut dans git. Quand vous faites un git clone <url>, <url> _ est automatiquement ajouté à votre référentiel local sous le nom Origin. Vous pouvez bien sûr ajouter d’autres télécommandes sous différents noms en utilisant git remote add.

Quand vous faites git Push -u Origin master, cela signifie "Tout transférer de mon maître local vers la télécommande nommée Origin". La structure de cette commande est bien entendu plus générale - la forme plus générale est git Push -u <remote> <branch>, ce qui poussera la branche nommée branch vers la télécommande désignée, en la créant à l'extrémité distante si elle ne l'a pas déjà (c'est ce que la -u drapeau fait).

En complément, git Push, par défaut, poussera la branche actuelle vers Origin, correspondant à git Push Origin <current-branch>.

13

Vous pouvez avoir plusieurs télécommandes, chacune avec un nom différent - tel que le nom par défaut "Origine".

Votre question suppose que la branche principale est actuellement extraite.

git Push -u Origin master

Poussez la branche locale nommée maître vers la télécommande "Origin" en tant que branche nommée maître. L'option -u indique à git local de suivre cette branche distante en amont de votre branche locale.

12
Jeff Puckett

Un remote n'est qu'un mot: un nom à utiliser pour identifier un autre référentiel Git quelque part.

La chaîne Origin est le nom par défaut de la télécommande (singulière) que git clone Insère automatiquement lorsque vous clonez à partir d'un autre référentiel Git ("Origin" -al). Vous pouvez choisir un autre nom et/ou ajouter plus de télécommandes. Chaque télécommande a au moins une URL, qui est l'endroit où l'autre référentiel doit être trouvé.

Pour git Push, Le troisième mot - ajustez ce nombre si nécessaire, si vous ajoutez divers indicateurs; dans ce cas, vous avez ajouté -u. Il s’agit donc maintenant du quatrième mot - il s’agit normalement du nom d’une télécommande.

Les mots restants sont tous refspecs, ce qui peut être résumé (mais pas à 100% avec précision ... en fait, à moins de 50% avec précision, selon la manière dont vous comptez :-)) comme une paire de noms de branches séparés par un signe deux-points.

Si vous n'écrivez qu'un seul nom de branche comme master, Git considère que "utiliser (une partie de) l'amont si un est défini, sinon utilisez le même nom après les deux points". Habituellement, l'amont, s'il est défini, a le même nom de base. Ainsi, master finit généralement par signifier master:master. Git les envoie - le Git à l'URL de la télécommande - les commits trouvés sur votre (le nom à gauche), puis leur demande de définir leur branche (le nom à droite) pour le même conseil commet que vous venez de pousser pour cette branche.

Si vous ne mettez aucune référence, la valeur par défaut de Git dépend de votre version de Git. Depuis la version 2.0 de Git, la valeur par défaut est de pousser votre branche actuelle vers une branche du même nom de la télécommande.

L’indicateur -u Indique à git Push Que, si le Push réussit, il doit définir l’amont pour la branche que vous venez de pousser.

Le en amont d'une branche se compose de deux parties: le nom d'une télécommande et le nom d'une branche de cette télécommande. Puisque vous avez donné à git Push Les deux éléments, le nom de la télécommande était Origin et la branche était le deuxième (post-deux-points) master de l'impliqué master:master à partir de master - si cela réussit, l'initialisation de master en amont est définie sur Origin/master.

(Edit: vous pouvez légitimement vous demander d'où vient le / Dans le paramètre en amont de Origin/master. C'est en partie un artefact historique. Malheureusement, cela crée une énorme confusion. Pour l'instant, gardez simplement à l'esprit que remote, branche, et branche de suivi à distance sont des choses différentes dans Git. . Ils sont tous liés de différentes manières, mais il est important de se rappeler qu'ils ne sont pas identiques et que les termes ont des significations très spécifiques. Le mot track est également surchargé. Le nouveau terme en amont est meilleur, mais toutes les descriptions ne l'utilisent pas.)

5
torek

Non, remote est une structure parente de Origin. Ce n'est que le nom par défaut de remote que Git crée lorsque vous clonez un référentiel.

Plus d'informations sur cette question: Qu'est-ce que “l'origine” dans Git?

2
Dave