Git: Une manière correcte de changer Active Branch dans un repository nu?

J’ai un repository nu qui sert de magasin central pour mon projet. Tous les développeurs git clone pour partager avec lui. Quand ils font le clone, ils obtiennent un extrait de la twig principale (à moins qu’ils ne repo.git/HEAD git clone -n ) car repo.git/HEAD contient la ref: refs/heads/master , ce qui en fait la twig active .

La question est de savoir comment modifier correctement la twig active . Je pourrais tout simplement pirater le fichier repo.git/HEAD directement, mais cela semble désagréable et, enfin, piraté.

J’ai essayé de faire git checkout dans le .git repo .git , mais cela a échoué car je n’étais pas dans une arborescence de travail.

J’ai essayé git update-ref HEAD refs/heads/otherbranch mais git update-ref HEAD refs/heads/otherbranch simplement mis à jour refs / heads / master pour qu’il soit identique à refs / heads / otherbranch (d’accord, je l’ai fait

J’ai essayé git update-ref --no-deref HEAD refs/heads/otherbranch et cela a presque fonctionné. Il a mis à jour le fichier HEAD , mais il l’a défini sur le SHA1 du commit indiqué par refs/heads/otherbranch .

Je teste avec la version 1.7.0.2.msysgit.0 git.

Je suppose qu’il n’y a aucun moyen de le faire via git push , car permettre à tout le monde de changer votre twig par défaut semble un peu dangereux (!), Mais il y a sûrement une meilleure façon de le faire dans le .git repo .git le fichier HEAD .

Si vous avez access au serveur de stockage distant, cet article suggère :

 git symbolic-ref HEAD refs/heads/mybranch 

Qui mettra à jour le fichier HEAD dans votre référentiel afin qu’il contienne:

 ref: refs/heads/mybranch 

comme documenté dans le git-symbolic-ref


Si vous n’avez pas access au repo distant, consultez ma réponse précédente .


Rappelez-vous qu’une commande comme git remote set-head :

  • ne change pas la twig par défaut du repo distant .
    Il ne modifie qu’une twig de suivi distante stockée dans votre repo local sous la forme refs/remotes//HEAD

  • ne change pas HEAD lui-même (encore une fois, seulement refs/remotes//HEAD ), d’où la nécessité de git symbolic-ref .

Donc, git remote set-head n’est pas la solution ici.
git symbolic-ref HEAD est, si vous avez un access direct au repo distant.

Pour modifier la twig, vous devez remplacer la référence HEAD par la twig que vous souhaitez utiliser.

D’abord, listez toutes les références dans le repository nu en faisant

 $find ref 

Puis trouvez la référence pour votre twig, le format sera comme suit refs/heads/ . Donc, la prochaine étape consiste à vérifier la référence actuelle, tapez simplement:

 $git symbolic-ref HEAD 

ainsi vous savez quelle est la twig actuelle puis mettez-la à jour si nécessaire.

 $git sumbolic-ref HEAD ref/heads/ 

Thant c’est ça. Prendre plaisir.

En outre, si vous n’avez pas access au repository nu, en faisant un git remote set-head et vous avez terminé

Voir cette réponse précédente

J’ai aussi un repo nu sur notre serveur et j’ai réussi à récupérer des fichiers en utilisant

 git clone //server/repo/directory -b branch_name 

dans un nouveau référentiel local même si la page de manuel indique que ceci est uniquement pour les référentiels non nus.

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

git symbolic-ref HEAD refs/heads/mybranch

et il semble que seul le fichier repo.git / HEAD ait été modifié, il est donc tout à fait prudent de “pirater” le fichier.