Quelle est la différence entre «origine» et «à distance» dans les commandes git?

Dans git lingo, l’ origin et la remote la même chose? Ou est-ce que l’ origin renvoie au répertoire local?

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

  1. “Poussez tout en amont vers le repo distant appelé” origine “et sa twig” master “”
  2. “poussez tout depuis le repo local d’origine appelé” origine “vers la twig” maître “en amont”

Appréciez toute clarification!

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

  1. origin réfère au repo distant, plutôt que la copie clonée locale du repo distant. Ce n’est pas clair quand on lit que l’ origin est un alias de remote et qu’elle est créée lors du git clone de git clone
  2. origin fait référence au repo distant dans git push -u origin master car les copies locales du repo sont implicites et “rarement référencées”.

Dans git lingo origin est juste le nom par défaut pour une télécommande à partir de laquelle un repo a été cloné à l’origine. Il pourrait également avoir été appelé source ou remote1 ou simplement remote .

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

Toutes les télécommandes sont égales. origin est simplement (et littéralement) la première parmi celles-ci (pour un repo cloné). 🙂

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

En ce qui concerne vos interprétations de l’instruction push , votre première est la plus proche d’être correcte, mais la commande push telle qu’elle est écrite poussera la twig master locale vers la twig master de la télécommande identifiée par l’ origin nom (configuré localement).

S’il n’y a pas de twig principale dans la télécommande, alors une sera créée.

Les détails complets de la commande push et des drapeaux, options, etc. sont bien sûr présents dans les documents .

Vous faites rarement (voire jamais) référence au référentiel ‘local’ puisque vos opérations sont effectuées dans le contexte d’un repo.

Vous pouvez avoir plusieurs télécommandes, chacune avec un nom différent – comme “origine” par défaut

Votre question suppose que la twig principale est actuellement extraite.

 git push -u origin master 

Poussez la twig locale nommée master à la télécommande “origine” en tant que twig nommée maître. L’indicateur -u indique à git local de suivre cette twig distante en amont de votre twig locale.

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

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

origin est, par convention, le nom distant par défaut de git . Lorsque vous faites un git clone , est automatiquement ajouté à votre repo local sous l’ origin du nom. Vous pouvez bien sûr append d’autres télécommandes sous différents noms en utilisant git remote add .

Lorsque vous lancez git push -u origin master , cela signifie “tout transférer de mon maître local vers l’ origin nommée à distance”. La structure de cette commande est bien sûr plus générale – la forme la plus générale est git push -u , qui poussera la twig nommée branch vers la télécommande désignée, en la créant à l’extérieur si la télécommande ne l’a pas déjà (c’est ce que fait le drapeau -u ).

Comme addendum supplémentaire, git push , par défaut, poussera la twig en cours à l’ origin , correspondant à l’ git push origin .

Une télécommande n’est qu’un mot: un nom à utiliser pour identifier un autre repository Git quelque part.

L’ origin chaîne est le nom par défaut de la télécommande (singulière) git clone automatiquement par git clone , lorsque vous clonez à partir d’un autre repository Git (“d’origine” -al). Vous pouvez choisir un autre nom et / ou append d’autres télécommandes. Chaque télécommande a au moins une URL, où se trouve l’autre référentiel.

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 , maintenant c’est le quasortingème mot – c’est normalement le nom d’une télécommande.

Les mots restants sont tous des refspecs , qui peuvent être résumés (bien que pas à 100% avec précision … en fait, moins de 50% avec précision, en fonction de la façon dont vous comptez :-))

Si vous écrivez un seul nom de twig comme master , Git prend cela pour signifier “utiliser (une partie de) l’amont si l’un est défini, sinon utiliser le même nom après les deux-points”. En général, l’amont, s’il est défini, a le même nom de base, de sorte que master signifie généralement master:master . Git les envoie – le Git à l’URL de la télécommande – commet trouvé sur votre twig (le nom sur la gauche), puis leur demande de définir leur twig (le nom sur la droite) à la même astuce que vous venez de pousser pour cette twig .

Si vous ne mettez pas de refspecs, la valeur par défaut de Git dépend de votre version de Git. Depuis Git version 2.0, le défaut est de pousser votre twig actuelle vers une twig du même nom sur la télécommande.

Le drapeau -u indique à git push que si le push réussit, il doit définir le stream amont pour la twig que vous venez de pousser.

En amont d’une twig, il y a deux parties: le nom d’une télécommande et le nom d’une twig sur cette télécommande. Puisque vous avez donné à git push deux éléments – le nom de la télécommande était origin et la twig était le deuxième master (post-colon) du master implicite master:master from master – si elle réussit, elle mettra l’amont du master à origin/master .

( Edit : vous pourriez légitimement vous demander d’où vient le / , dans le contexte d’ origin/master en amont . C’est en partie un artefact historique. Malheureusement, cela conduit à d’énormes confusions. Les twigs et les twigs de suivi à distance sont toutes différentes dans Git. Elles sont toutes liées de diverses manières, mais il est important de se rappeler qu’elles ne sont pas identiques et que les termes ont des significations très spécifiques. Le nouveau terme en amont est meilleur, mais toutes les descriptions ne l’utilisent pas.)

Non, remote est une structure d’ origin . C’est juste le nom par défaut de Git remote créé lorsque vous clonez un référentiel.

Plus d’informations dans cette question: Qu’est-ce que «origine» dans Git?