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/
ne change pas HEAD
lui-même (encore une fois, seulement refs/remotes/
), 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.