Pourquoi est « origine / HEAD » apparaît lors de l'exécution « branche git -r »?
-
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?
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