web-dev-qa-db-ja.com

「git clone」の後のデフォルトブランチを決定するものは何ですか?

私の理解では、複製されたリポジトリのデフォルトのブランチは、複製されるレポジトリ内でHEADが指すものであれば何でもかまいません。

これは事実ではない場合があります。私の理解は明らかに欠陥があるので、(裸の)リポジトリをクローンするときにデフォルトのチェックアウトブランチを決定するものは何ですか?

そのレポでの最後のコミットは、ベアレポのHEADで参照されているブランチと、クローンのチェックアウトブランチとして取得しているブランチとの間のマージです。

ランニング git remote show Originは以下を返します。

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

ベアリポジトリはGitバージョン1.8.2.1を使用し、クライアントは1.7.12.4を使用し、トランスポートはSSHです。

たぶん、答えは実際には こちら です。 この回答 確認します。すべてがHEADと同じリビジョンを指すシンボリック参照の選択肢がある場合、クライアントは使用するブランチをguessします。

36

Git 1.8.5 で始まるサーバーは、HEADが指す実際のブランチ名を「symref」機能で送信します。 Git 1.8.5より新しいクライアントとサーバーの両方がある場合、HEADcorrectlyが更新されます。

その前に、クライアントは、HEADが指すオブジェクトID(最終的に)をすべてのブランチのすべてのオブジェクトIDと比較することにより、HEADが指し示しているものを推測します。 refs/heads/masterという名前のブランチが優先されます。HEADmasterの両方が同じオブジェクトIDを指す場合、cloneは新しいリポジトリのデフォルトのブランチをmasterに設定します。

それ以外の場合、一致するOIDを持つ最初のブランチ(ブランチがアルファベット順にソートされている場合)がデフォルトのブランチになります。一致するOIDを持つブランチがない場合、HEADはオブジェクトID(つまり、切り離されたHEAD)に直接設定されます。

25
Edward Thomson

実際にはHEADが指します。HEADの設定にはgit symbolic-ref HEAD refs/heads/mybranchを使用します。(ソース: http://feeding.cloud.geek.nz/posts/setting- default-git-branch-in-bare /

12

ベアリポジトリにはHEADもあります。それはあなたがそれをクローンするときに得るものです。

から - git cloneドキュメント

新しく作成されたディレクトリにリポジトリを複製し、複製されたリポジトリの各ブランチにリモート追跡ブランチを作成します(git branch -r)、クローンリポジトリの現在アクティブなブランチから分岐された初期ブランチを作成してチェックアウトします。

「現在アクティブなブランチ」に関するビットは、リモートのHEADリビジョンを参照しています。

別の動作が必要な場合は、--branchまたは-b

--branch <name>
-b <name>
新しく作成されたHEADを、クローンリポジトリのHEADが指すブランチを指す代わりに、<name>代わりにブランチ。非ベアリポジトリでは、これはチェックアウトされるブランチです。 --branchは、タグを取得し、結果のリポジトリのそのコミットでHEADを切り離すこともできます。

7
Carl Norum