217 votes

Git branching : maître vs origine/master vs télécommandes/origine/master

Je pense que je suis sur la bonne voie pour comprendre les concepts de base de git. J'ai déjà mis une télécommande repos et cloné à partir d'. D'autre part, j'ai créé un serveur côté vide repos et lié mon local de repos.

Mais c'est vraiment à confusion: je ne vois pas le droit de sources de m'expliquer la différence entre origin/master vs remotes/origin/master. Eh bien, maître, est une branche locale et remotes/origin/master est une seule télécommande. Mais qu'est-ce que cette douteuse origin/master branche?

Quelqu'un pour m'aider à lever le brouillard? :)

Merci beaucoup.

228voto

larsks Points 23184

Prendre un clone d'un dépôt distant et exécutez git branch -a (pour afficher toutes les branches git sait à ce sujet). Il sera probablement ressembler à quelque chose comme ceci:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

Ici, master est une branche dans le référentiel local. remotes/origin/master est une branche nommée master sur la télécommande nommé origin. Vous pouvez vous référer à ce que soit origin/master, comme dans:

git diff origin/master..master

Vous pouvez aussi vous référer à elle comme remotes/origin/master:

git diff remotes/origin/master..master

Ce sont juste deux façons différentes de faire référence à la même chose (d'ailleurs, ces deux commandes de dire "montrez-moi les changements entre la télécommande master de la branche et mon master de la branche).

remotes/origin/HEAD est le default branch pour la télécommande nommé origin. Cela vous permet de dire, simplement, origin au lieu de origin/master.

115voto

ErichBSchulz Points 1058

Réponse courte pour les nuls comme moi (volé Torek) :

  • origine/master est « où le maître était là la dernière fois que j’ai vérifié »
  • maître « où le maître est ici repose sur ce que j’ai fait »

40voto

torek Points 25463

Techniquement, il n'y en a pas fait tout "à distance" des choses dans votre repo git, il y a juste les noms locaux qui doivent correspondre aux noms sur un autre, différent des pensions. Celles nommées origin/whatever sera d'abord correspondre avec ceux sur le repo vous clonée à partir de:

git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...

fait une copie locale de l'autre repo. C'est ainsi qu'on note toutes les branches qui étaient là, et l'engage ceux reportez-vous à, et les bâtons de ceux à l'intérieur de votre repo sous le répertoire .git/refs/remotes/origin/.

Selon combien de temps vous allez avant de vous git fetch ou l'équivalent de mise à jour de "mon exemplaire de certains.où..il y a", ils peuvent changer leurs branches, en créer de nouveaux, et de supprimer certains. Lorsque vous faites votre git fetch (ou git pull ce qui est vraiment chercher plus de fusion), votre pension sera de faire des copies de leur nouveau travail et changement de tous les refs/remotes/origin/<name> d'entrées que de besoin. C'est ce moment de l' fetching qui rend tout le match (enfin, ça, et le clone initial, et certains cas d' pushing trop de coeur à chaque fois que git a une chance de le vérifier-mais voir la mise en garde ci-dessous).

Git a normalement vous référer à votre propre refs/heads/<name> comme juste <name>, et la distance qu' origin/<name>, et ça marche, tout simplement parce que c'est évident qui est qui. Il est parfois possible de créer vos propres noms de branche qui font qu'il est pas évident, mais ne vous inquiétez pas à ce sujet jusqu'à ce qu'il se passe. :-) Il suffit de donner git les noms les plus courts qui rend évident, et il va aller à partir de là: origin/master est "où le maître était là la dernière fois que j'ai vérifié", et master est "où le maître est ici basé sur ce que je fais". Exécutez git fetch à la mise à jour de git sur "où le maître est là" en tant que de besoin.


Mise en garde: dans les versions de git âgés de plus de 1.8.4, git fetch a certains modes qui ne sont pas de mise à jour "où le maître est là" (plus précisément, les modes qui ne sont pas de mise à jour à distance de branches). L'exécution git fetch originou git fetch --all, ou même juste git fetch, n' mise à jour. L'exécution git fetch origin master n'est pas. Malheureusement, ce "n'est pas mise à jour en mode" est déclenchée par l'ordinaire, git pull. (Ce qui est essentiellement juste un problème mineur et est fixé dans git 1.8.4 et plus tard.)

5voto

rick Points 11

Une clarification (et un point qui me déconcertait):

"remotes/origin/TÊTE est la branche par défaut" n'est pas vraiment correct.

remotes/origin/master était la branche par défaut dans le dépôt distant (la dernière fois que vous avez vérifié). La TÊTE n'est pas une branche, c'est juste des points à une branche.

Penser à la TÊTE que votre zone de travail. Quand vous pensez de cette façon, puis "git checkout branchname' a de sens par rapport à l'évolution de votre espace de travail fichiers pour être celui d'une branche particulière. Vous de "contrôle" de la branche des fichiers dans votre espace de travail. TÊTE à toutes fins pratiques, est ce qui est visible dans votre espace de travail.

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