web-dev-qa-db-de.com

Was bestimmt den Standardzweig nach "git clone"?

Ich verstehe, dass der Standardzweig eines geklonten Repositorys der ist, auf den HEAD im geklonten Repository verweist.

Ich habe jetzt einen Fall, in dem dies nicht wahr ist. Mein Verständnis ist offensichtlich fehlerhaft. Was bestimmt den Standard-Checkout-Zweig beim Klonen eines (nackten) Repos?

Das letzte Commit für dieses Repo war eine Zusammenführung des Zweigs, auf den im Bare-Repo HEAD verwiesen wird, mit dem Zweig, den ich als Checkout-Zweig im Klon erhalte.

Das Ausführen von git remote show Origin Gibt Folgendes zurück:

Fetch URL: ...
Push  URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
  <bad-branch>
  live
Remote branches:
  ...

Bare Repo verwendet Git Version 1.8.2.1, Client verwendet 1.7.12.4, Transport ist SSH.

Vielleicht ist die Antwort tatsächlich diese hier . Diese Antwort bestätigt es. Wenn eine Auswahl von symbolischen Referenzen vorhanden ist, die alle auf dieselbe Revision wie HEAD verweisen, wird der Client den zu verwendenden Zweig rate verwenden.

36

Beginnend mit Git 1.8.5 sendet der Server den tatsächlichen Zweignamen, auf den HEAD zeigt, in der Funktion "symref". Wenn Sie sowohl einen Client als auch einen Server haben, der neuer als Git 1.8.5 ist, wird HEAD korrekt aktualisiert .

Zuvor wird der Client erraten, worauf HEAD hingewiesen haben könnte, indem er die Objekt-ID, auf die HEAD (letztendlich) verweist, mit allen Objekt-IDs von vergleicht alle Zweige. Es bevorzugt einen Zweig mit dem Namen refs/heads/master: Wenn sowohl HEAD als auch master auf dieselbe Objekt-ID verweisen, wird durch Klonen der Standardzweig im neuen Repository auf master festgelegt.

Andernfalls ist der erste Zweig mit einer übereinstimmenden OID (wenn die Zweige alphanumerisch sortiert sind) der Standardzweig. Wenn keine Zweige übereinstimmende OIDs haben, wird HEAD direkt festgelegt auf die Objekt-ID (dh einen abgelösten KOPF).

25
Edward Thomson

Es ist eigentlich was HEAD verweist auf. Verwenden Sie git symbolic-ref HEAD refs/heads/mybranch zum Einstellen von HEAD. (Quelle: http://feeding.cloud.geek.nz/posts/setting-default-git-branch-in-bare/ )

12

Ein nacktes Repo hat auch ein HEAD. Das bekommen Sie, wenn Sie es klonen.

Von dem git clone Dokumentation :

Klont ein Repository in ein neu erstelltes Verzeichnis und erstellt Remote-Tracking-Zweige für jeden Zweig im geklonten Repository (sichtbar mit git branch -r) und erstellt einen Anfangszweig, der aus dem derzeit aktiven Zweig des geklonten Repositorys gespalten wird, und checkt ihn aus.

Das Bit über "derzeit aktive Verzweigung" bezieht sich auf die HEAD -Revision der Fernbedienung.

Wenn Sie ein anderes Verhalten wünschen, können Sie --branch oder -b:

--branch <name>
-b <name>
Anstatt den neu erstellten HEAD auf den Zweig zu verweisen, auf den der HEAD des geklonten Repository verweist, verweisen Sie auf <name> stattdessen verzweigen. In einem nicht bloßen Repository ist dies der Zweig, der ausgecheckt wird. --branch kann auch Tags nehmen und das HEAD bei diesem Commit im resultierenden Repository entfernen.

7
Carl Norum