240 votes

Git: Une manière correcte de changer Active Branch dans un dépôt nu?

J'ai un dépôt nu et que c'est le magasin central pour mon projet. Tous les développeurs ne git clone <repo> partager avec elle. Quand ils ne le clone, ils obtiennent une extraction de la branche master (à moins qu'ils n' git clone -n) parce qu' repo.git/HEAD contient ref: refs/heads/master, ce qui en fait la Branche Active.

La question est, comment puis-je changer la Branche Active correctement? Je pourrais simplement pirater repo.git/HEAD le fichier directement, mais qui semble méchant et, ainsi, hacky.

J'ai essayé de faire git checkout <otherbranch> dans le repo .git répertoire, mais qui a échoué parce que je n'étais pas dans un travail de l'arbre.

J'ai essayé d' git update-ref HEAD refs/heads/otherbranch mais que viens de mettre à jour refs/heads/master pour être le même que refs/heads/otherbranch (bon d'accord, je n'ai qu'un sur un mannequin référentiel, pas mon!)

J'ai essayé d' git update-ref --no-deref HEAD refs/heads/otherbranch et qui a presque fonctionné. Il a mis à jour le HEAD le fichier, mais elle a mis à la SHA1 de la validation pointée par refs/heads/otherbranch.

Je suis en essais avec la version git 1.7.0.2.msysgit.0.

Je devine qu'il n'y a aucun moyen de le faire par le biais git push, permettant à tout un chacun de modifier vos paramètres par défaut de la branche semble un peu dangereux (!), mais il y a certainement une meilleure façon de le faire dans le repo .git répertoire que directement piratage de l' HEAD le fichier.

351voto

VonC Points 414372

Si vous avez accès à la télécommande nu repo, cet article suggère:

git symbolic-ref HEAD refs/heads/mybranch

Qui mettra à jour la TÊTE de fichier dans votre référentiel de sorte qu'il contient:

ref: refs/heads/mybranch

comme indiqué dans l' git-symbolic-ref


Si vous n'avez pas accès à la télécommande repo, voir ma réponse précédente.


Rappelez-vous que une commande comme celle - git remote set-head:

  • ne pas modifier la valeur par défaut de la branche de la distance des pensions.
    Il modifie uniquement un suivi à distance de la branche stockées dans votre local pensions qu' refs/remotes/<name>/HEAD

  • ne pas changer l' HEAD lui-même (encore une fois, seulement refs/remotes/<name>/HEAD), d'où la nécessité d' git symbolic-ref.

Donc, git remote set-head n'est pas la réponse ici.
git symbolic-ref HEAD est, si vous avez un accès direct à la distance des pensions.

-1voto

dvdvck Points 81

En outre, si vous n’avez pas accès au référentiel nu, en faisant un `` et vous avez terminé

Voir cette précédente réponse

-3voto

boryn Points 81

J’ai comparé deux répertoires avant et après application

``

et il semble que seul fichier repo.git/HEAD a été changé alors, probablement, que c’est tout à fait sûr juste pour « pirater » le fichier.

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