Modifier une tête déportée Git pour pointer vers quelque chose en plus maître
-
18-09-2019 - |
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:
-
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.
-
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.
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 laHEAD 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érencesrefs/heads/master
et qui existe
-> vous obtenez une branche locale appelée maître, à partir de l'origine / maîtreHEAD références
refs/heads/anotherBranch
et qui existe
-> vous obtenez une branche locale appeléeanotherBranch
, à partir deorigin/anotherBranch
HEAD références
refs/heads/master
et qui n'existe pas
-> "clone git" se plaintJe 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.
- Maintenant, ils ont un menu déroulant pour sélectionner la branche HEAD à http: //repo.or. cz (exemple: http://gitorious.org , aussi (regarder quelque part dans le paramètres);
- et à http://GitHub.com : admin> Direction par défaut> ( choisir quelque chose) (grâce à la réponse de @ srcspider);
- v2.6 , la branche par défaut peut être définie dans le interface Web sous la rubrique 'Projets'> 'Liste'>> des 'branches'. Dans v2.12, Gerrit a ajouté une nouvelle commande set-tête qui peut être utilisé sur ssh .
- et Girar (fonctionnant sur http://git.altlinux.org pour créer des packages pour la distribution de ALT), on peut l'interface ssh pour cela:
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
par exemplessh git.alt default-branch packages/autosshd.git sisyphus
pour changer la tête dans lesautosshd.git
repo à distance pour pointer vers la branchesisyphus
.
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.