Вопрос:

Git - голова (нижний регистр) против головы (верхний регистр)

git

551 просмотра

3 ответа

68 Репутация автора

Правильно ли я понял, и разница между Git head (нижний регистр) и Git HEAD (верхний регистр) заключается в том, что первый - это конечный коммит, а второй - только текущий (будь то конечный или не конечный, выбранный для ГОЛОВА коммит)?

Редактировать: под "end-commit" я подразумевал "последний коммит данной ветви".

Автор: pntshere Источник Размещён: 07.01.2018 02:07

Ответы (3)


5 плюса

66452 Репутация автора

Решение

В командной строке gitвы пишете:

HEAD это текущий коммит, то есть коммит, который в настоящее время извлекается из рабочего каталога.

head, как есть, ничего не значит для GIT, если у вас нет ветви или тега с именем head. Но это звучит как плохая идея.

Но когда в документации говорится о главе ветки, она ссылается на последний коммит этой ветки, возможно, именно это вы имеете в виду под end commit . В реальных командах вы будете использовать имя ветви, например master(или origin/masterдля удаленной главы), а не буквальное слово head.

Автор: rodrigo Размещён: 07.01.2018 02:15

1 плюс

29 Репутация автора

Из того, что я исследовал, «head» и «HEAD» одинаковы, оба могут использоваться для ссылки на текущий извлеченный коммит.

Вы можете проверить любой коммит ветки и использовать git showкоманду для проверки значения хэша коммита.

git show headи git show HEADотобразит тот же коммит, который является текущим коммитом.

Автор: Matthew An Размещён: 18.02.2018 08:45

1 плюс

214354 Репутация автора

Стоит отметить, что, когда вы находитесь в файловой системе без учета регистра (как, например, по умолчанию в Windows и MacOS), при попытке открыть файл abcоткроется вместо существующего файла ABC, если он действительно существует, и, конечно, наоборот. наоборот.

Git хранит информацию о текущем коммите в файле. В большинстве случаев этот файл называется .git/HEAD. Поэтому, когда Git пытается получить доступ к информации о текущем коммите, он просто открывает .git/HEADи читает ее. (Файл обычно содержит имя текущей ветви . Например, если вы находитесь в своей masterветви, ваш .git/HEADфайл будет читать:. ref: refs/heads/master)

Например, при запуске git showбез добавления аргументов, Git читает , .git/HEADчтобы узнать, что вы на master, а затем читает либо .git/packed-refsили .git/refs/heads/masterвыяснить , какие совершают masterсредства, и показывает , что совершающие. Все эти детали реализации , которые могут измениться в будущем, и некоторые из них действительно изменить в современной Git при некоторых обстоятельствах, так что это не разумно зависеть от этого. Но вот как это на самом деле работает сегодня.

Если вы запускаете git show xyz, Git пытается найти .git/refs/heads/xyzи, если это не сработает, пытается найти, нет .git/packed-refsли в нем строки о ветке xyz. Git также пытается найти .git/refs/tags/xyzи .git/xyz. Точный порядок, в котором Git пробует каждую из этих операций, является еще одной деталью реализации, но на самом деле задокументирована - по моде; документация описывает результат, а не метод - в руководстве gitrevisions .

Если вы запускаете git show headи работаете под Windows или MacOS, Git в конце концов пытается открыть .git/head. Поскольку ваша операционная система готова воспринимать это как запрос на открытие, .git/HEADа поскольку .git/HEAD он действительно существует, ваша ОС открывается .git/HEAD. Git читает ref: refs/heads/master(или что-то еще) из этого файла и показывает вам тот же коммит, который вы видели бы, если бы вы запускали git show HEADили просто работали git show.

В современном Git все идет не так, когда вы находитесь в добавленном рабочем дереве, построенном с помощью run git worktree add .... HEADИз добавленной работы дерева является не в .git/HEAD. Это в другом подкаталоге .git. Если вы запустите git show HEADэто добавленное рабочее дерево, Git сам увидит специальное имя HEADв заглавных буквах и знает, как найти правильное HEAD имя для этого рабочего дерева. Но если вы запустите git show head, Git не увидит все в верхнем регистре HEADи попытается открыть различные файлы, начиная с .git/head. Если это удается - если он открывается - .git/HEADGit читает ветку для основногорабочее дерево, а не ветвь для рабочего дерева, на котором вы на самом деле находитесь в добавленном рабочем дереве. Итак git show HEAD, в добавленном рабочем дереве показывает текущий коммит там; но git show headв этом же добавленном рабочем дереве показывается текущий коммит основного рабочего дерева, а не этот.

В Linux, используя обычные файловые системы (которые чувствительны к регистру), git show headпросто не работает вообще. Избегайте этой вредной привычки: если вам не нравится вводить HEADвсе буквы в верхнем регистре, используйте @.

Автор: torek Размещён: 28.05.2019 04:58
Вопросы из категории :
32x32