Имя ветки Git - чувствительно к регистру или нечувствительно?
=============================================================

Я новый пользователь git и недавно получил устаревший репозиторий git, за которым нужно следить.

Это исходное состояние (вывод git show-branch):

Обратите внимание, что на этом этапе есть ветвь с именем «dev». Обратите внимание, что выделено несколько ссылок на dev (то есть dev, dev ^, dev ~ 2 и т. Д.).

В целях развития я пытался создать филиал под названием «DEV», весь капитал.

Поэтому я продолжил создавать новую ветку (git branch DEV) и теперь запускаю git show-branch –date-order:

Обратите внимание, что как dev, так и DEV указаны как ветви. Также обратите внимание, что в 5-й строке ссылки на dev теперь изменены на DEV (то есть DEV, DEV ^, DEV ~ 2 и т. Д.).

На что ссылается выход 5-й строки? Я ожидал бы, что он останется «dev» вместо того, чтобы быть измененным на «DEV», поскольку описания рядом с ним относятся к описанию старой работы во время ветки «dev».

Я пытаюсь вернуться к тому, как это было, изменив имя ветви DEV на DV (запустив git branch –m DEV DV) и показывая, что ветка теперь выглядит так:

Обратите внимание, что ветка теперь включает DV и dev. Также обратите внимание, что ссылки на 5-ю строку для dev теперь изменились на DV (то есть DV, DV ^, DV ~ 2 и т. Д.).

Есть ли способ вернуться к тому, как это было во время первоначального состояния с точки зрения ссылок DV? Неужели этот мерзавец запутался и переименовал мою историческую информацию в ветку, которая похожа и отличается только заглавными буквами?

Пожалуйста, помогите, как я могу это исправить. Спасибо, куча

Вы создали новую ветку`DEV` когда ты был на ветке`dev`, Так`DEV` а также`dev` две ветви, которые указывают на один и тот же коммит. После того, как вы переименовали`DEV` в`DV`, сейчас`DV` а также`dev` две ветви, которые указывают на один и тот же коммит.

Все просто отлично. Если не хочешь`DV` беспокоить вас, вы могли бы просто бежать`git branch -d DV` убрать ветку`DV`, Если вы действительно хотите создать новую ветку, лучше придерживаться правила именования, которое не может сбить вас с толку и других.

Я никогда не пользовалась`git show-branch`. `git log --oneline --all --graph --decorate=full` рисует четкую графику журнала.



`git show-branch` ([как ElpieKay](https://stackoverflow.com/a/38493870/1256452)Я никогда не использую`git show-branch`; кажется в основном неинформативным)

Имена веток Git - и имена тегов, и все остальныессылка имена, как их называет Git, были изначальнопредназначена быть чувствительным к регистру.

Все это прекрасно работает на компьютерах с Linux / Unix, где код Git чувствителен к регистру. Когда Git хранит имена веток в файловой системекак имена файлов (что это только делаетиногда), файловая система также чувствительна к регистру.1

Этоиногда не работает в Windows и некоторых системах MacOS. В частности, происходит сбой, когда Git хранит ссылки в отдельных файлах, имена которых получены из имени ссылки, и эти имена файлов не чувствительны к регистру (например, сохраняют регистр, но сбрасывают регистр во время сопоставления имен; или даже преобразуют все в верхний регистр). -только, как в действительно старом формате FAT 8.3, но мы можем надеяться, что ни одна современная файловая система не сделает этого).

Как отмечено выше, Git не всегда хранит ссылочные имена как имена файлов. На самом деле, при первоначальном клонировании все имена находятся в одном файле с именем`.git/packed-refs`,2 поэтому на данный момент ониявляются с учетом регистра. Но они становятся "распакованы" со временем,3 а затем в некоторых системах они складываются.

Поскольку в некоторых системах иногда происходит сбой, обычно лучше избегать использования нескольких имен ссылок, которые отличаются только регистром.

1Конечно, в современных системах Unix / Linux вы теперь можете получить доступ к файловым системам, сохраняющим регистр, но не чувствительным к регистру, и теперь Windows и MacOS могут запретить компиляцию регистра для некоторых файловых систем. (Но если вы измените настройки по умолчанию, ожидайте, что программное обеспечение, предназначенное для вашего устройства, выйдет из строя, потому что это произойдет. Такие вещи, как Photoshop, внутренне пытаются использовать файлы с именем`foo` а также`FOO` и ожидайте, что это будет ссылаться на тот же файл!)

2Этот файл упакованных ссылок существует довольно давно, но не навсегда, и очень ранние версии Git могут его не использовать. Внутри Git приобретает новый «сменный интерфейс имен ссылок», и в будущих версиях Git могут не использоваться ни этот файл, ни отдельные файлы для каждой ссылки.

3Как правило, создание или обновление ссылки приводит к появлению распакованного файла ссылки. Бег`git pack-refs --all` заменит распакованные ссылки на упакованные, восстановив полную чувствительность к регистру. Без`--all`, `git pack-refs` только упаковывает уже упакованные ссылки, что в значительной степени является бесполезным режимом работы (он был предназначен для случая, который больше не используется).