Qu'est-ce que «l'origine» dans Git?


583

Quand je cours:

git push origin branchname

Qu'est-ce que c'est exactement originet pourquoi dois-je le taper avant le nom de la branche?


63
"origin" est le nom du référentiel distant où vous souhaitez publier vos validations. Par convention, le référentiel distant par défaut est appelé "origine", mais vous pouvez travailler avec plusieurs télécommandes (avec des noms différents) en même temps. Plus d'informations ici (par exemple): gitref.org/remotes
Benoit Courtine

1
Notez également que l'origine est un
dépôt


Mais lorsque vous utilisez git fetch puis git branch -r les branches locales sont ajoutées avec origin / ugh: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

Récupérez le fichier .git \ config qui contient les mappages d'alias aux URL, le dossier .git est masqué par défaut.
Abhijeet Patel

Réponses:


569

originest un alias sur votre système pour un référentiel distant particulier. Ce n'est en fait pas une propriété de ce référentiel.

En faisant

git push origin branchname

vous dites de pousser vers le originréférentiel. Il n'est pas nécessaire de nommer le référentiel distant origin: en fait, le même référentiel peut avoir un alias différent pour un autre développeur.

Les télécommandes sont simplement un alias qui stocke l'URL des référentiels. Vous pouvez voir quelle URL appartient à chaque télécommande en utilisant

git remote -v

Dans la pushcommande, vous pouvez utiliser des télécommandes ou vous pouvez simplement utiliser directement une URL . Un exemple qui utilise l'URL:

git push git@github.com:git/git.git master

1
Une seule télécommande peut-elle être un alias pour plusieurs autres télécommandes? Que se passe-t-il si je voulais qu'une télécommande soit transmise à plusieurs autres télécommandes? Par exemple, pousser vers un référentiel principal et pousser vers un référentiel de sauvegarde? Serait-ce une chose raisonnable à vouloir dans certaines situations? EDIT: Il existe plusieurs solutions ici .
Yankee

1
Et si j'omets le mot-clé "origine"? Quand nous disons "git push", ne va-t-il pas de toute façon pousser tous les commits vers le dépôt distant? L'ajout du mot clé "origine" semble redondant.
Mugen

@Mugen Dans les documents pour git pushvous pouvez voir qu'il vérifie d'abord la configuration de ce référentiel (avec lequel vous pouvez vérifier git config --list) pour une clé appelée branch.<branchname>.remote. Si ce n'est pas défini, "il s'agit par défaut de l'origine" - git-scm.com/docs/git-push
Kenmore

157

originn'est pas le nom du référentiel distant. Il s'agit plutôt d'un alias local défini comme clé à la place de l'URL du référentiel distant.

Cela évite à l'utilisateur d'avoir à taper l'URL distante entière lors de l'invite.

Ce nom est défini par défaut et par convention par Git lors du premier clonage depuis une télécommande.

Ce nom d'alias n'est pas codé en dur et peut être modifié à l'aide de l'invite de commande suivante:

git remote rename origin mynewalias

Jetez un œil à http://git-scm.com/docs/git-remote pour plus de précisions.


1
Et si j'omets le mot-clé "origine"? Quand nous disons "git push", ne va-t-il pas de toute façon pousser tous les commits vers le dépôt distant? L'ajout du mot clé "origine" semble redondant.
Mugen

74

Git a le concept de "télécommandes", qui sont simplement des URL vers d'autres copies de votre référentiel. Lorsque vous clonez un autre référentiel, Git crée automatiquement une télécommande nommée "origine" et pointe vers lui.

Vous pouvez voir plus d'informations sur la télécommande en tapant git remote show origin.


1
Les commandes git sont très déroutantes pour les débutants. Je suppose que cela a à voir avec l'histoire de ce système de contrôle de version. Alors, question: au lieu de git remote show origin, pourquoi pas simplement git show origin? Il doit y avoir une raison, quelle est-elle? Merci.
Stack0verflow

5
@ Stack0verflow: il est probablement préférable de la poser comme nouvelle question pour que les gens puissent faire des recherches si vous êtes curieux. 'git show' est déjà une autre commande qui affiche un commit, et techniquement rien ne vous empêcherait d'avoir une branche appelée 'origin' en plus d'avoir une télécommande appelée origin ...
Jason Malinowski


24

Facile! "origine" est exactement ce que vous avez surnommé votre référentiel distant lorsque vous avez exécuté une commande comme celle-ci:

git remote add origin git@github.com:USERNAME/REPOSITORY-NAME.git

À partir de là, Git sait que "origine" pointe vers ce référentiel spécifique (dans ce cas, un référentiel GitHub). Vous auriez pu l'appeler "github" ou "repo" ou tout ce que vous vouliez.


19

J'étais également confus par cela, et voici ce que j'ai appris.

Lorsque vous clonez un référentiel, par exemple à partir de GitHub:

  • originest l'alias de l'URL à partir de laquelle vous avez cloné le référentiel. Notez que vous pouvez modifier cet alias.

  • Il existe une masterbranche dans le référentiel distant (aliasée par origin). Il existe également une autre masterbranche créée localement.

De plus amples informations peuvent être trouvées à partir de cette question SO: branchement Git: maître vs origine / maître vs télécommandes / origine / maître


11

Lorsque vous clonez un référentiel avec git clone, il crée automatiquement une connexion distante appelée originpointant vers le référentiel cloné. Ceci est utile pour les développeurs qui créent une copie locale d'un référentiel central, car il fournit un moyen simple d'extraire des modifications en amont ou de publier des validations locales. Ce comportement est également la raison pour laquelle la plupart des projets basés sur Git appellent leur origine de référentiel central.



0

Sur https://www.git-tower.com/learn/git/glossary/origin :

Dans Git, "origine" est un nom abrégé pour le référentiel distant à partir duquel un projet a été initialement cloné. Plus précisément, il est utilisé à la place de l'URL de ce référentiel d'origine et facilite ainsi le référencement.

Notez que l'origine n'est en aucun cas un nom "magique", mais juste une convention standard. Bien qu'il soit logique de laisser cette convention intacte, vous pouvez parfaitement la renommer sans perdre aucune fonctionnalité.

Dans l'exemple suivant, le paramètre URL de la commande "clone" devient "l'origine" du référentiel local cloné:

git clone https://github.com/gittower/git-crash-course.git

Lorsque vous copiez du contenu écrit par des tiers, vous devez indiquer clairement que vous le faites et vous devez toujours inclure un lien vers la source. Sinon, c'est du plagiat, et c'est une raison pour supprimer la réponse. D'ailleurs, votre réponse avait déjà été postée .
Fabio dit Réintégrer Monica le

0

Les autres réponses indiquent qu'il origins'agit d'un alias pour l' URL d'un référentiel distant qui n'est pas entièrement précis. Il convient de noter qu'une adresse qui commence par httpest une URL tandis que celle qui commence par git@est un URI ou Universal Resource Identifier.

Toutes les URL sont des URI, mais pas toutes les URI sont des URL.

En bref, lorsque vous tapez, git remote add origin <URI>vous dites à votre git local que chaque fois que vous utilisez le mot, originvous voulez réellement dire l'URI que vous avez spécifié. Considérez-le comme une variable détenant une valeur.

Et comme une variable, vous pouvez le nommer tout ce que vous voulez (par exemple. github, heroku, destination, Etc.).


0

distant (alias d'URL du référentiel) → origine (alias en amont) → maître (alias de branche);

  • remote, Le niveau même que working directory, index, repository,

  • origin, mappage de la branche de référentiel local à la branche de référentiel distant

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.