Как заставить "git branch" уважать " ядро.флаг "ignorecase" в Linux?

мы используем удаленный репозиторий Git, расположенный на сервере Linux в офисе. Все клиенты-это ПК с Windows с расширениями Git, установленными в качестве клиента (работает с msysgit).

в клиентской системе, если я попытаюсь сделать следующее:

git branch Branch1
git branch branch1

вторая команда потерпит неудачу, сообщив мне, что ветвь с таким именем уже существует. Это то, что я ожидаю, так как я установил core.ignorecase true в git config.

но, если я войду в систему Linux непосредственно и выполнить те же команды, обе ветви будут созданы, даже если core.ignorecase флаг имеет значение true.

Я бы ожидал, что вторая команда тоже потерпит неудачу, так как я настроил репозиторий, чтобы игнорировать случай, но либо флаг ничего не делает в системах Linux, либо я что-то пропустил.

может ли кто-нибудь помочь мне понять проблему, поскольку мы планируем перенести наш SCM из Source Safe в Git в ближайшее время, и эта проблема пугает нас. Что произойдет, если два разработчика создать ветви с тем же именем, но в другом случае, и нажать результат в репозитории Linux?

2 ответов


Я хотел бы добавить больше деталей над ответом @meagar:

FAT32 / NTFS являются случае-сохранении файловые системы. То есть, если вы назовете файл "Foo.txt", он будет храниться как "" Foo.формат txt." Если вы сохраните файл как "Foo.txt", он будет сохранен как " foo.формат txt." Но поскольку он нечувствителен к регистру, " Foo.txt " и " foo.txt " фактически одинаковы, и вы не можете иметь оба файла в одном каталоге.

в вашем репозитории в Windows, Если вы измените имя с "Foo.txt " to " foo.txt", и если вы не покажете это как изменение, вы можете установить core.ignorecase конфигурация в true и git не будет видеть это как изменение. Если вы установите его в false, он будет. (Но из-за природы файловой системы и git это будет выглядеть как новый файл foo.txt был добавлен, добавляя путаницу в Windows).

это цель core.ignorecase

подходит к ветке. Ветви - это просто указатели на фиксацию. Эти указатели-просто файлы. Подобные файлы хранятся в .git/refs/heads. Когда вы создаете ветку, скажите:bar файл с именем это. Теперь, в Linux, при создании ветви с именем Bar, он может идти вперед и создать файл .git/refs/head/Bar и, следовательно, позволяет создавать филиал. Но в Windows вы не можете создать .git/refs/head/Bar и, следовательно, вы не сможете создать ветвь бара, когда бар существует. Поймите это core.ignorecase связано с файлами в вашем репозитории-вашей базе кода - и не влияет на файлы метаданных мерзавец.

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


как заставить "git branch" уважать " ядро.флаг "ignorecase" в Linux?

вы не можете, потому что флаг не делает то, что вы думаете, что он делает.

ядра.параметром ignorecase

если true, эта опция позволяет различные обходные пути, чтобы git лучше работать на файловых системах, которые не чувствительны к регистру, как FAT.

core.ignorecase не имеет ничего общего с поведением, что вы описываете, это не связан с чувствительностью к регистру имен ветвей. Git не может сказать разницу между Branch1 и branch1 в Windows не связано с Ли core.ignorecase установлен, он будет вести себя так же независимо.

... но либо флаг ничего не делает в системах Linux, либо я что-то пропустил.

вы ничего не пропустили. Флаг ничего не делает в системах Linux. core.ignorecase не для того, чтобы сделать операционные системы нечувствительными к регистру, это для разрешения Git работать на сломанные case-нечувствительные операционные системы. Linux принципиально чувствителен к регистру, как и Git. Вы должны попытаться работать с этим и требовать, чтобы ваши разработчики использовали нижний регистр для своих имен ветвей. Вы должны не пытается заставить Git эмулировать сломанное поведение из других операционных систем.

что произойдет, если два разработчика создадут ветви с одинаковым именем, но разным случаем, и нажмут результат на репозиторий в Linux?

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