Ma compréhension est que la branche par défaut d'un référentiel cloné doit être ce que HEAD pointe dans le référentiel en cours de clonage.
J'ai maintenant un cas où ce n'est pas vrai. Ma compréhension est évidemment imparfaite, alors qu'est-ce qui détermine la branche de paiement par défaut lors du clonage d'un dépôt (nu)?
Le dernier commit sur ce dépôt était une fusion entre la branche référencée dans le dépôt nu HEAD dans la branche que je reçois en tant que branche de paiement dans le clone.
Fonctionnement git remote show Origin
Retour:
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
<bad-branch>
live
Remote branches:
...
Le dépôt nu utilise Git version 1.8.2.1, le client utilise 1.7.12.4, le transport est SSH.
Peut-être que la réponse est en fait celle-ci ici . Cette réponse le confirme. S'il existe un choix de références symboliques pointant toutes vers la même révision que HEAD, le client devinera la branche à utiliser.
En commençant par Git 1.8.5 , le serveur enverra le nom de branche réel vers lequel HEAD
pointe, dans la capacité "symref". Si vous avez à la fois un client et un serveur plus récents que Git 1.8.5, il mettra à jour HEAD
correctement .
Avant cela, le client devinera ce que HEAD peut avoir indiqué en comparant l'ID d'objet vers lequel HEAD (finalement) pointe avec tous les ID d'objet de toutes les branches. Il préfère une branche nommée refs/heads/master
: si HEAD
et master
pointent vers le même ID d'objet, alors le clone définira la branche par défaut dans le nouveau référentiel sur master
.
Sinon, la première branche avec un OID correspondant (lorsque les branches sont triées de façon alphanumérique) sera la branche par défaut. Si aucune branche n'a des OID correspondants, alors HEAD
sera défini directement à l'ID d'objet (c'est-à-dire un HEAD détaché).
C'est en fait ce que HEAD pointe vers. Utilisez git symbolic-ref HEAD refs/heads/mybranch
pour régler HEAD. (source: http://feeding.cloud.geek.nz/posts/setting-default-git-branch-in-bare/ )
Un dépôt nu a également un HEAD
. C'est ce que vous obtenez lorsque vous le clonez.
Clone un référentiel dans un répertoire nouvellement créé, crée des branches de suivi à distance pour chaque branche du référentiel cloné (visible à l'aide de
git branch -r
), et crée et extrait une branche initiale issue de la branche actuellement active du référentiel cloné.
Le bit sur "branche actuellement active" fait référence à la révision HEAD
de la télécommande.
Si vous souhaitez un comportement différent, vous pouvez utiliser --branch
ou -b
:
--branch <name>
-b <name>
Au lieu de pointer leHEAD
nouvellement créé vers la branche pointée par leHEAD
du référentiel cloné, pointez sur<name>
branche à la place. Dans un référentiel non nu, c'est la branche qui sera extraite.--branch
peut également prendre des balises et détacher leHEAD
à ce commit dans le référentiel résultant.