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?
Appréciez toute clarification!
Les réponses à ma question ont clarifié deux points pour moi:
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 Origin
est un alias de remote
et est créé à l’époque de git clone
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".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.
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.
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>
.
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.
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.)
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?