web-dev-qa-db-fra.com

Qu'est-ce qui détermine la branche par défaut après "git clone"?

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.

36
Christian Goetze

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é).

25
Edward Thomson

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/ )

12
Valentin Lorentz

Un dépôt nu a également un HEAD. C'est ce que vous obtenez lorsque vous le clonez.

Du git clone documentation :

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 le HEAD nouvellement créé vers la branche pointée par le HEAD 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 le HEAD à ce commit dans le référentiel résultant.

7
Carl Norum