Comment définir la référence HEAD d'une télécommande Git pour qu'elle pointe vers autre chose que "maître"?
Mon projet a pour politique de ne pas utiliser de branche "maître" (toutes les branches doivent avoir des noms significatifs). De plus, le référentiel maître canonique n'est accessible que via ssh: //, sans accès au shell (comme GitHub ou Unfuddle).
Mon problème est que le référentiel distant a toujours une référence HEAD à refs / heads / master, mais j'en ai besoin pour pointer vers une branche différente. Cela pose deux problèmes:
Lors du clonage du repo, là ceci,
avertissement: la tête à distance fait référence à une référence inexistante, impossible de vérifier.
C'est déroutant et peu pratique.
Le navigateur de code basé sur le Web dépend de HEAD comme base pour parcourir l'arborescence. J'ai besoin de HEAD pour pointer vers une branche valide, alors.
la source
Réponses:
Il y avait presque la même question sur GitHub il y a un an.
L'idée était de renommer la branche master:
(un "
git-symbolic-ref HEAD refs/head/published
" ne serait pas propagé au dépôt distant)Ceci est similaire à « Comment puis-je Delete / maître dans Git ».
Comme dit dans ce fil : (c'est moi qui souligne)
(ce qui est le point essentiel de votre question, je sais;))
Peut - être que le seul moyen serait une "publication pour les pauvres" , où vous:
Mais cela impliquerait un accès en écriture au serveur, ce qui n'est pas toujours possible.
Comme je l'explique dans " Git: Comment changer Active Branch dans un dépôt nu? ",
git remote set-head
Cela ne changerait rien sur le dépôt distant.Cela ne changerait que la branche de suivi à distance stockée localement dans votre dépôt local, au format
remotes/<name>/HEAD
.la source
-f
(--force
). J'ai modifié la réponse en conséquence. Ensuite, la réponse que vous référez utilise cette même option.Mise à jour: cela ne fonctionne que pour la copie locale du référentiel (le «client»). Veuillez consulter les commentaires des autres ci-dessous.
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, passer la tête de la télécommande
origin
à la branchedevelop
serait:git remote set-head origin develop
la source
git checkout -b default; git push origin HEAD; git remote set-head origin default
. Vous pouvez ensuite inspecter les modifications locales aveccat .git/refs/remotes/origin/HEAD
(il devrait l'êtreref: refs/remotes/origin/default
), et l'absence de modifications à distance avecgit remote show origin
(ce sera toujours ce qu'il était avant d'ajouter la branche par défaut).Puisque vous mentionnez GitHub, pour le faire sur leur site, allez simplement dans votre projet, puis ...
admin > Default Branch > (choose something)
Terminé.
la source
Voir: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
Cela définit la branche par défaut dans le référentiel git. Vous pouvez l'exécuter dans des référentiels nus ou en miroir.
Usage:
la source
(Il y avait déjà fondamentalement la même question " créer une référence symbolique git dans un dépôt distant ", qui n'a reçu aucune réponse universelle.)
Mais il existe des réponses spécifiques pour diverses "fermes" git (où plusieurs utilisateurs peuvent gérer les dépôts 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 peuvent être utiles pour ceux qui lisent cette page et réfléchissent à ces services spécifiques.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
par exemplessh git.alt default-branch packages/autosshd.git sisyphus
changer le HEAD dans le repo distantautosshd.git
pour pointer vers lasisyphus
branche.la source
Si vous avez accès au dépôt distant à partir d'un shell, allez simplement dans le .git (ou le répertoire principal s'il s'agit d'un dépôt nu) et modifiez le fichier HEAD pour qu'il pointe vers la bonne tête. Par exemple, par défaut, il contient toujours 'refs: refs / heads / master', mais si vous avez besoin de foo comme HEAD à la place, éditez simplement le fichier HEAD et changez le contenu en 'refs: refs / heads / foo'.
la source
myrepo.git
. Le contenu du fichier HEAD dans le répertoire donné est passé deref: refs/heads/master
àref: refs/heads/mainline
. Maintenant, lorsque j'essaye de cloner le référentiel sur ma boîte locale, il pointe toujours vers master. J'ai exécuté lagit clone ssh://[email protected]/myrepo
commande. Une idée pour un tel comportement?git version 1.7.1
& Version du client Git:git version 1.9.4.msysgit.2
Vous pouvez créer une branche principale détachée en utilisant uniquement les commandes Git porcelain:
Cela nous donne un maître branche avec un message grossier (vous voudrez peut - être plus poli). Maintenant, nous créons notre "vraie" branche (appelons-la tronc en l'honneur de SVN) et la séparons du maître :
Hé, hop! gitk --all affichera le maître et le tronc sans lien entre eux.
La "magie" ici est que --amend oblige git commit à créer un nouveau commit avec le même parent que le HEAD actuel, puis à faire pointer HEAD dessus. Mais le HEAD actuel n'a pas de parent car c'est le commit initial dans le référentiel, donc le nouveau HEAD n'en obtient pas non plus, ce qui les rend détachés l'un de l'autre.
L'ancien commit HEAD n'est pas supprimé par git-gc car refs / heads / master pointe toujours dessus.
L' indicateur --allow-empty n'est nécessaire que parce que nous commettons un arbre vide. S'il y avait des ajouts de git après le git rm, ce ne serait pas nécessaire.
En vérité, vous pouvez créer une branche détachée à tout moment en branchant le commit initial dans le référentiel, en supprimant son arbre, en 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 référentiel distant, mais cela donne une réponse claire sur la façon de créer une branche détachée.
la source
git fetch git:[email protected]:foo remote-branch-name && git checkout -b detached-branch FETCH_HEAD
ajoutera une nouvelle branchedetached-branch
qui correspond à la brancheremote-branch-name
dans remotegit:[email protected]:foo
. Bien entendu, le "distant" peut être un référentiel dans le système de fichiers local que vous avez préalablement préparé.Tout d'abord, créez la nouvelle branche que vous souhaitez définir par défaut, par exemple:
$>git branch main
Ensuite, poussez cette branche à l' origine :
$>git push origin main
Maintenant, lorsque vous vous connectez à votre compte GitHub, vous pouvez accéder à votre référentiel et choisir Paramètres> Branche par défaut et choisir « principal ».
Ensuite, si vous le souhaitez, vous pouvez supprimer la branche principale:
$>git push origin :master
la source
git symbolic-ref
sur le shell distant ou de modifier le fichier texte appeléHEAD
dans le répertoire racine du référentiel distant.En lien avec la question, je me suis retrouvé ici en cherchant:
Comment rendre un dépôt local conscient d'une branche par défaut modifiée sur GitHub
Pour être complet, ajoutez la réponse:
la source
Pour les personnes gitolite, gitolite prend en charge une commande appelée - attendez -
symbolic-ref
. Il vous permet d'exécuter cette commande à distance si vous avez l'autorisation W (écriture) sur le dépôt.la source
Connectez-vous simplement à votre compte GitHub et à l'extrême droite du menu de navigation, choisissez Paramètres , dans l' onglet Paramètres, choisissez Branche par défaut et revenez à la page principale de votre référentiel qui a fait l'affaire pour moi.
la source