Pourquoi est « origine / HEAD » apparaît lors de l'exécution « branche git -r »?

StackOverflow https://stackoverflow.com/questions/354312

  •  21-08-2019
  •  | 
  •  

Question

Lorsque vous exécutez pourquoi les brasiers git branch -r faut-il la liste origin/HEAD? Par exemple, il y a une prise en pension à distance sur GitHub, par exemple, avec deux branches: maître et fonctionnalité impressionnante. Si je fais de l'attraper git clone puis aller dans mon nouveau répertoire et la liste des branches, je vois ceci:

$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature

Ou quelque ordre qu'elle serait (alpha? Je truquant cet exemple pour garder l'identité d'un secret repo innocent). Alors, quelle est l'entreprise HEAD? Est-ce que la dernière personne à leur avait push pointé quand <=> ils ont poussé? Ne que toujours quelque chose comme ça qu'ils ed <=>? Le mouvement de ... pourquoi autour <=> me importe ce que quelqu'un a <=> à une autre machine?

Je suis juste une poignée sur le suivi à distance et ce, donc c'est une confusion persistante. Merci!

EDIT: Je l'impression que dédié repo à distance (comme GitHub où personne ne ssh et travailler sur ce code, mais seulement tirer ou pousser, etc.) n'a pas et ne devrait pas avoir une tête parce qu'il y avait , au fond, aucune copie de travail. Pas?

Était-ce utile?

La solution

@robinst est correct.

Dans git, vous pouvez sélectionner quelle branche est cochée par défaut (à savoir lorsque vous clone). Par défaut, pointera à origin/HEAD que.

Sur GitHub, Vous pouvez modifier cette dans les paramètres d'administration pour votre repo GitHub. Vous pouvez aussi le faire à partir de la ligne de commande via

git remote set-head origin trunk

ou supprimer complètement via

git remote set-head origin -d

Exemple . Regardez sur le menu déroulant "Branches de commutateur. Est cochée trunk, donc suit <=> <=>.

Autres conseils

La raison pour laquelle un dépôt nu peut avoir une tête, est que parce qu'il détermine quelle branche est d'abord vérifié après un clone du dépôt.

Normalement, les points HEAD à maîtriser, et qui est la branche qui est vérifié quand les gens cloner le dépôt. Réglage à une autre branche (en éditant HEAD dans le référentiel nu) résultats dans cette branche en cours de vérification sur clone.

  

J'avais l'impression que   repo à distance dédiés (comme GitHub   où personne ne ssh et travailler   ce code, mais seulement tirer ou pousser, etc.)   n'a pas et ne devrait pas avoir une HEAD   parce qu'il y avait, au fond, pas   copie de travail. Pas?

J'ai eu la même impression exacte que vous avez dit.

Et je peux même pas supprimer cette branche de suivi à distance d'origine / HEAD cloné à partir de GitHub en faisant

git branch -d -r origin/HEAD

Cela n'a eu aucun effet.

Quelqu'un peut-il me dire comment je peux supprimer cette branche d'origine / HEAD suivi à distance?

mise à jour

Bien que je ne l'ai pas trouvé pourquoi il y a une origine / HEAD créé quand clone à partir de GitHub, je trouve un moyen de le supprimer.

La nouvelle version de git fournir

git remote set-head <name> -d

pour supprimer le pointeur de tête inutile de la branche de suivi à distance.

Et nous pouvons également changer le nom par défaut muet « origine » à ce que nous voulons en utilisant

git remote rename origin <new_name>

Espérons que cela peut aider. :)

Vous avez raison que pousser à dédiées à distance prises en pension fonctionnent beaucoup mieux quand ils sont « nus », qui est, quand ils ne sont pas les répertoires de travail. L'architecture de Git est conçu pour la mise à jour par des correctifs ou pull (fetch), ce qui est logique dans un VCS distribué. Comme les docs disent quelque part, pousser à une branche qui est actuellement vérifié peut conduire à « résultats inattendus » .

La tête est une partie des exigences d'un référentiel valide. Git Disposition du référentiel dit, en partie:

HEAD

A symref (see glossary) to the refs/heads/ namespace describing the currently active  
branch. It does not mean much if the repository is not associated with any working tree  
(i.e. a bare repository), but a valid git repository must have the HEAD file; some  
porcelains may use it to guess the designated "default" branch of the repository  
(usually master). It is legal if the named branch name does not (yet) exist.

Alors, vous allez voir HEAD dans le cadre de la liste des succursales, même si « cela ne signifie pas grand-chose ... »

Si « l'origine » est un référentiel distant, origine / HEAD identifie la branche par défaut sur ce dépôt distant.

Exemple:

$ git remote show
origin
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:walkerh/pipe-o-matic.git
  Push  URL: git@github.com:walkerh/pipe-o-matic.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Notez la ligne qui dit « branche HEAD: maître ». C'est là le dépôt distant permet aux clients de savoir quelle branche à la caisse par défaut.

Il y a toujours une tête Points à la branche actuellement vérifié sur la prise en pension à distance (qui peut ou ne peut pas être maître). Même les dépôts distants ont des succursales actuelles. Habituellement, il est maître, et du haut de ma tête, je ne peux penser à aucune raison pour laquelle on voudrait changer, mais il peut être modifié.

Je suppose que quelqu'un a poussé une branche et a appelé HEAD:

git push origin HEAD
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top