Подтвердить что ты не робот

Что определяет ветвь по умолчанию после "git clone"?

Мое понимание заключается в том, что ветвь по умолчанию клонированного репозитория должна быть тем, на что указывает HEAD в клонировании репо.

Теперь у меня есть случай, когда это неверно. Мое понимание явно ошибочно, так что определяет ветку проверки по умолчанию при клонировании (голого) репо?

Последняя фиксация в этом репо была слиянием между веткой, на которую ссылается в голое 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:
  ...

Bare repo использует Git версию 1.8.2.1, клиент использует 1.7.12.4, транспорт - SSH.

Возможно, ответ на самом деле здесь здесь. Этот ответ подтверждает это. Если есть выбор символических ссылок, указывающих на ту же ревизию, что и HEAD, клиент будет угадывать, какую ветвь использовать.

4b9b3361

Ответ 1

Начиная с Git 1.8.5, сервер отправит фактическое имя ветки, на которое HEAD указывает, в функции "symref". Если у вас есть как клиент, так и сервер, более новый, чем Git 1.8.5, он правильно обновит HEAD.

До этого клиент догадывается, на что указывает HEAD, сравнивая идентификатор объекта, который HEAD (в конечном счете) указывает на все идентификаторы объектов всех ветвей. Он предпочитает ветвь с именем refs/heads/master: если оба HEAD и master указывают на один и тот же идентификатор объекта, тогда клон будет устанавливать ветвь по умолчанию в новом репозитории master.

В противном случае первая ветвь с соответствующим идентификатором OID (когда ветки сортируются по алфавиту) будет ветвью по умолчанию. Если ни одна из ветвей не имеет соответствующих идентификаторов OID, то HEAD будет задаваться непосредственно идентификатору объекта (т.е. Отдельному HEAD).

Ответ 3

Голый репо имеет также HEAD. Это то, что вы получаете, когда клонируете его.

Из git clone документация:

Клонирование репозитория во вновь созданном каталоге, создает ветки удаленного отслеживания для каждой ветки в клонированном репозитории (видимые с помощью git branch -r) и создает и проверяет начальную ветвь, которая разветвляется из активной активной ветки клонированного репозитория.

Бит о "активной активной ветки" относится к удаленной версии HEAD.

Если вам нужно другое поведение, вы можете использовать --branch или -b:

--branch <name>
-b <name>
Вместо указания вновь созданного HEAD на ветку, на которую указывают клонированные репозитории HEAD, вместо этого укажите на ветвь <name>. В не-голом репозитории это ветка, которая будет проверена. --branch также может принимать теги и отделяет HEAD от этого фиксации в результирующем репозитории.