2010-09-13 4 views
0

J'ai utilisé Git raisonnablement avec succès (peut-être c'est une évaluation optimiste) pour continuer sur 2 ans maintenant, mais je l'ai fait aveuglément. Pour une raison ou une autre, j'ai commencé à être beaucoup plus curieux à propos des internes et je me suis mis à creuser dans des agences de suivi à distance. Ils ont un sens dans l'ensemble, mais je suis parti avec cette question:Qu'est-ce que la branche actuellement active du dépôt cloné?

Lorsque je clone un référentiel et toutes les branches de suivi à distance sont créés, ce qui est le « de dépôt cloné branche active » (cité la documentation git-clone)?

Si je clonage à partir du dépôt d'un collègue, je suppose que ce serait la branche de suivi de toute branche locale a le * devant elle dans les git branch résultats, mais que si je le clonage de Github? Est-ce juste la branche que j'ai sélectionnée dans l'interface? Les tests initiaux indiquent que ce n'est pas le cas.

Merci.

+0

http://stackoverflow.com/questions/1485578/how-do-i-change-a-git-remote-head-to-point-to-quelquechose-besides-master a quelques réponses. – VonC

Répondre

0

La branche actuellement active du référentiel Git est la branche vers laquelle pointe HEAD. En interne, HEAD est simplement un fichier qui se trouve en haut de la GIT_DIR du répertoire (le répertoire .git d'un référentiel non nu, ou le sommet d'un référentiel nu). Si HEAD ressemble à ref: refs/some/thing, alors il est interprété comme symref (référence symbolique) à la référence nommée (généralement une branche sous refs/heads/). Si HEAD contient une représentation hexadécimale ASCII de 40 octets d'un nom d'objet (SHA-1), nous disons qu'il s'agit d'un "HEAD détaché" (puisqu'il n'est pas "attaché" à une branche normale) et fonctionne comme un ref (c'est-à-dire que cela fonctionne comme n'importe quelle autre branche).

Comme vous le supposiez, git branch affichera la branche actuellement active précédée d'un astérisque. Cela fonctionne dans les dépôts réguliers (non-nus) et nus.

Dans les dépôts réguliers (non dénudés) (ceux qui ont des arbres de travail) HEAD est automatiquement maintenue par des utilisations normales de git checkout:

git checkout other-branch 
# HEAD is now a symref to refs/heads/other-branch 

dépôt nu (habituellement utilisés sur les serveurs) ont aucun arbre de travail , donc git checkout ne fonctionnera pas. Pour mettre à jour une tête de dépôt nu, vous devez utiliser git symbolic-ref:

git symbolic-ref -m 'new default branch' HEAD refs/heads/other-branch 
# HEAD is now a symref to refs/heads/other-branch 

Dans les deux cas, vous devez avoir un accès direct au référentiel de mettre à jour HEAD pour changer la branche active. Comme la plupart des fournisseurs d'hébergement, GitHub ne fournit pas d'accès direct aux dépôts. Il fournit cependant un web interface that lets users change the HEAD of their repositories (ils l'appellent la "branche par défaut").

Questions connexes