Question

Comment puis-je définir une référence de HEAD à distance Git pour pointer vers quelque chose de plus « maître »?

Mon projet a une politique de ne pas utiliser une branche « maître » (toutes les branches doivent avoir des noms significatifs). En outre, le référentiel maître canonique est uniquement accessible via ssh:. //, sans accès au shell (comme GitHub ou Unfuddle)

Mon problème est que le dépôt distant a encore une référence HEAD pour refs / heads / maître, mais je besoin de pointer vers une autre branche. Cela est à l'origine de deux problèmes:

  1. Lors du clonage du repo, il présente,

      

    avertissement: HEAD se réfère à distance ref inexistant, incapable de caisse

    .

    C'est confus et peu pratique.

  2. Le navigateur de code Web dépend de la tête comme une base pour la navigation de l'arbre. Je dois HEAD pour pointer vers une branche valide, puis.

Était-ce utile?

La solution

Il y avait presque même question sur GitHub un an il y a.

L'idée était de renommer la branche principale:

git branch -m master development
git branch -m published master
git push -f origin master 
  

Faire maître ont ce que vous voulez que les gens à utiliser, et faire tout autre travail dans les branches.

(un "git-symbolic-ref HEAD refs/head/published" ne serait pas propagée à la prise en pension à distance)

Ceci est similaire à " Comment puis-je supprimer origine / maître Git ".


Comme indiqué dans ce fil : (Souligné par l'auteur)

  

« git clone » crée une seule branche locale.
  Pour ce faire, il se penche sur la HEAD ref de la prise en pension à distance, et crée une branche locale avec le même nom que la branche distant référencé par elle.

     

Donc, pour conclure que, vous avez repo A et clonez:

     
      
  • HEAD références refs/heads/master et qui existe
      -> vous obtenez une branche locale appelée maître, à partir de l'origine / maître

  •   
  • HEAD références refs/heads/anotherBranch et qui existe
      -> vous obtenez une branche locale appelée anotherBranch, à partir de origin/anotherBranch

  •   
  • HEAD références refs/heads/master et qui n'existe pas
      -> "clone git" se plaint

  •   
     

Je ne sais pas s'il y a un moyen de modifier directement l'arbitre de HEAD dans un repo .

(ce qui est le tout point de votre question, je sais;))


Peut-être la seule façon serait "publication pour les pauvres" , où vous:

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

Mais cela impliquerait un accès en écriture au serveur, ce qui est toujours possible.


Comme je l'explique dans " Git: CORRECTEMENT changer Branch active dans un dépôt nu ", git remote set-head ne changerait rien sur la prise en pension à distance.

Il ne changerait la branche de suivi à distance stockées localement dans votre repo local, remotes/<name>/HEAD.

Autres conseils

Mise à jour: Cela ne fonctionne que pour la copie locale du dépôt (le "client"). S'il vous plaît voir les commentaires ci-dessous des autres.

Avec une version récente de git (février 2014), la procédure correcte serait:

git remote set-head $REMOTE_NAME $BRANCH

Ainsi, par exemple, le passage de la tête origin à distance à la branche develop serait:

git remote set-head origin develop

Depuis que vous mentionnez simplement GitHub, de le faire sur leur site aller dans votre projet, puis ...

admin > Default Branch > (choose something)

Fait.

Voir: http: // www .kernel.org / pub / logiciel / scm / git / ref.html-symbolique-git docs /

Ceci définit la branche par défaut dans le dépôt git. Vous pouvez exécuter ce dans des dépôts nus ou en miroir.

Utilisation:

$ git symbolic-ref HEAD refs/heads/<branch name>

(Il y avait déjà essentiellement la même question « créer un git symbolique ref dans le dépôt distant », qui a reçu pas de réponse universelle.)

Mais il y a des réponses spécifiques pour divers git "fermes" (où plusieurs utilisateurs peuvent gérer repo git via une interface restreinte: via http et ssh): http://Github.com , http://Gitorious.org , http://repo.or.cz , Girar ( http://git.altlinux.org ).

Ces réponses spécifiques pourraient être utiles pour ceux qui lisent cette page et penser à ces services.

Si vous avez accès à la prise en pension à distance à partir d'un shell, allez dans le .git (ou le répertoire principal si son repo nu) et modifier le fichier HEAD pour pointer vers la tête correcte. Par exemple, par défaut, il contient toujours « refs: refs / heads / maître », mais si vous avez besoin foo être la tête à la place, il suffit d'éditer le fichier HEAD et modifier le contenu de « refs: refs / heads / foo » <. / p>

Vous pouvez créer une maison individuelle maître branche en utilisant la porcelaine seule commande Git:

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

Cela nous donne un maître branche avec un message grossier (vous voudrez peut-être plus poli). Maintenant, nous créons notre branche "réelle" (Appelons trunk en l'honneur de SVN) et le divorce à partir de maître :

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

Hé, presto! gitk --all affichera maître et tronc sans lien entre eux.

La "magie" est ici que - modifier les causes git commit pour créer un nouveau commit avec le même parent que l'actuel chef, puis faire le point de tête pour la . Mais le chef actuel n'a pas un parent car il est la première commettras dans le référentiel, de sorte que le nouveau chef ne soit pas non plus, ce qui les rend détachés les uns des autres.

La vieille tête ne commit pas effacé par git-gc parce que refs / heads / maître pointe toujours à lui.

- allow-vide option est uniquement nécessaire parce que nous nous engageons un arbre vide. S'il y en avait git ajouter l ' après la git rm il ne serait pas nécessaire.

En vérité, vous pouvez créer une branche détachée à tout moment par branchement initial commettras dans le référentiel, la suppression de son arbre, ajoutant votre arbre détaché, puis en faisant git commit --amend .

Je sais que cela ne répond pas à la question de savoir comment modifier la branche par défaut sur le dépôt distant, mais il donne une réponse propre sur la façon de créer une branche détachée.

Tout d'abord, créez la nouvelle branche que vous souhaitez définir comme valeur par défaut, par exemple:

$>git branch main

Ensuite, appuyez sur cette branche à l'origine :

$>git push origin main

Maintenant, quand vous vous connectez à votre compte GitHub, vous pouvez aller à votre dépôt et choisissez Paramètres> Direction par défaut et choisissez « principale . »

Alors, si vous le souhaitez, vous pouvez supprimer la branche principale:

$>git push origin :master

Pour les personnes gitolite, gitolite prend en charge une commande appelée - attendre qu'il - symbolic-ref. Il vous permet d'exécuter cette commande à distance si vous avez W (écriture) l'autorisation de la prise en pension.

liée à la question, je me suis retrouvé ici lors de la recherche:

Comment puis-je faire un courant repo local d'une branche par défaut modifiée sur GitHub

Pour être complet, en ajoutant la réponse:

git remote set-head origin -a

Simple connectez-vous à votre compte GitHub et sur le côté droit dans le menu de navigation choisissez Paramètres , dans la section Onglet Paramètres choisissez Direction par défaut et revenir à la page principale de votre dépôt qui a fait l'affaire pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top