Ответ 1
Исходный ответ:
Происхождение HEAD
выводится только при клонировании репо. Если вы в противном случае добавили удаленный (например, с помощью git remote add
или переименовав другой существующий пульт), эта ссылка не будет существовать, , потому что нет причин для ее использования.
В большинстве случаев удаленные репозитории должны быть голыми репозиториями, а в голых репозиториях HEAD
просто указывается на ветку "по умолчанию". Это актуально только в одно время: при клонировании. Поэтому после клонирования любой удаленный HEAD
больше не важен для вашего клона, а Git не будет извлекать эту ссылку с любого пульта.
Как запросил пользователь lesmana, я снова просмотрел эту информацию, чтобы найти дополнительную информацию:
"Как удалить origin/HEAD
?"
Вам не обязательно это делать.
Ссылка не влияет на то, как работает ваше репо, а ref - буквально просто небольшой текстовый файл в вашей файловой системе, поэтому он занимает почти не место (всего несколько байтов).
Если вы все еще хотите удалить его, вы можете использовать
git update-ref -d refs/remotes/origin/HEAD
(если вы хотите удалить удаленный HEAD, который не находится на origin
, вместо этого используйте соответствующее удаленное имя).
"Как создать origin/HEAD
?"
Как указывалось ранее, удаленный HEAD ref используется только для клонирования и никогда не требуется Git в более позднее время. Если вы его вручную не используете (что не очень полезно, вы можете просто использовать ветвь, на которую она указывает), нет причин для ее создания вручную.
Тем не менее, если вы абсолютно уверены, вы можете использовать
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
"Почему удаленная HEAD не удаляется автоматически клоном, если это действительно бесполезно?"
Нет никакой конкретной причины, из того, что я могу сказать, кроме того, что явным образом информирую пользователя о том, какая ветка считается ветвью по умолчанию в клонированном удаленном репо. Однако, как я уже упоминал выше, его существование не вызывает проблем и почти не имеет места, поэтому нет реальной причины его удалить.
Для получения дополнительной информации не стесняйтесь обращаться к Git разработчикам непосредственно в список рассылки Git:)
"Какова конкретная причина, по которой клон нуждается в этом?"
Ни одна из страниц man не объясняет напрямую, что git clone
всегда использует это, но в некоторых местах обнаруживает побочные упоминания.
Например, man git clone
говорит:
--branch <name>
-b <name>
Вместо того, чтобы указывать вновь созданную HEAD на ветку, на которую указывают клонированные репозитории HEAD, вместо этого укажите ветку
<name>
. [...]
и
--[no-]single-branch
Клонировать только историю, ведущую к кончику одной ветки, либо указанную опцией
--branch
, либо первичные удаленные точки HEAD. [...]
Кроме того, man gitrepository-layout
говорит:
HEAD
[...] Это не значит, что если репозиторий не связан ни с каким рабочим деревом (то есть с открытым репозиторием), но в действительном репозитории Git должен иметь
HEAD
файл; некоторые фарфоры могут использовать его для угадывания назначенной ветки "по умолчанию" репозитория (обычно это мастер).
Это означает, что
- a) у самого удаленного репо должен быть READ HEAD (действительный), хотя он не имеет семантического значения (кроме указания ветки по умолчанию)
- b)
git clone
использует удаленный репозиторий HEAD ref, чтобы определить, где указать локальныйHEAD
(если вы не указали переопределение с помощью--branch
). Чтобы работать с этим ref, он должен локально создать его (поэтомуorigin/HEAD
). Как упоминалось выше, он просто не удаляется.