Git не чувствителен к регистру?


98

В первом обязательстве моего частичного вызова _Electronicsоно было написано с заглавной буквы, затем я изменил его на _electronics.

Git под cygwin проигнорировал регистр после фиксации нового имени, поэтому я изменил имя вручную в целевом репо.

Теперь он иногда меняет _electronicsчастичное завершение на _Electronics.

Что я сделал не так?


9
На какой ОС вы работаете?
— Кейт Томпсон

10
Какую файловую систему вы используете?
— Эндрю Маршалл,

Окна с cygwin. На моем сервере работает Ubuntu Linux. Не знаю файловую систему, думаю, ext3 или ext2 - мой провайдер настроил минимальную установку.
— JAkk

Разве вы не рады, что Windows решила не учитывать регистр?
— Cascabel

4
Windows нечувствительна к регистру, но иногда (чаще сегодня) сохраняет регистр .
— Arafangion 06

Ответы:


74

Это будет выглядеть как две разные вещи, но вызовет проблемы в системе, не чувствительной к регистру. В этом случае убедитесь, что все пути или имена файлов заполняются табуляцией. Далее, чтобы на всякий случай изменить название чего-нибудь, сделайте так:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

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

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Это также связано с настройкой имен каталогов: git mv и изменить только регистр каталога


похоже, это было правильно (за исключением того, что я переходил с заглавных букв на прописные)
— JAkk

Я заглянул в это, пока я привык к cygwin, просто удобнее использовать cygwin - спасибо за подсказку
— JAkk

Вы можете просто сделать git mv file.txt File.txt. Не уверен, что это новая функция git.
— Фил

108

Это будет зависеть от core.ignorecaseзначения конфигурации, которое имеет значение false в файловых системах с учетом регистра и true в msysgit в Windows.

core.ignorecase

Если это правда, этот параметр включает различные обходные пути, позволяющие git лучше работать с файловыми системами, не чувствительными к регистру, такими как FAT. Например, если список каталогов находит «makefile», когда git ожидает «Makefile», git предположит, что это действительно тот же файл, и продолжит запоминать его как «Makefile».

По умолчанию установлено значение false, за исключением того, что git-clone (1) или git-init (1) будут проверять и устанавливать core.ignorecase true, если это необходимо, при создании репозитория.

Более подробно в этом ответе на изменение заглавных букв в именах файлов в Git .


80
Это правильный ответ имо. В будущем я буду использовать git config --unset-all core.ignorecase && git config --system core.ignorecase falseс sudo.
— Знаркус

2
То же самое и Джеймсу, @Znarkus обнаружил исправление этой проблемы в OS X, спасибо!
— Крейг Накамото,

1
@Znarkus работает и в Windows. Красивая.
— orlade

9
@Znarkus, проблема с этим в OSX заключается в том, что когда вы переименовываете файл через искатель и меняете только регистр, git увидит переименованную версию как полностью новый файл, но не создаст соответствующее «удаление» действие для старой версии файла. Итак, если вы зафиксируете и нажмете на github, github будет иметь как файл с прежним именем, так и файл с новым именем, но в вашей локальной системе будет только новый файл, и git не будет мудрее.
— ivanreese 05

2
@spiralganglion Для веб-разработчиков на OSX я действительно могу порекомендовать создать раздел с учетом регистра, а затем смонтировать его как ваш www-каталог.
— Знаркус 06

23

Это намного проще:

git mv Electronics electronics -f
git commit -m "That was easy!"

1
Вы пробовали это в файловой системе без учета регистра?
— Эдвард Томсон

1
Сначала я прочитал это как оригинальный плакат, пытающийся выполнить переименование папки с изменением регистра, а не файла. Теперь, когда я перечитываю это, неясно. Действительно, mv -fс напильником будет работать.
— Эдвард Томсон


0

В моем случае у меня было две папки testsи Testsкоторые показали , как две отдельные папки в Github , но одной Testsпапки в Windows. Моей целью было объединить их обоих tests.

Я использовал следующий подход:

  1. Создать новую папку temp
  2. Скопируйте все содержимое из Testsвtemp
  3. удалять Tests
  4. выполнять git rm Tests -r
  5. Переименовать tempвtests

0

Я попытался решить проблему, и в Windows10 все прошло успешно.

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

Мне нужно будет выполнить следующие команды в командной строке git mv TEST test1 -f git mv text1 test -f git commit -m "переименование ..." git push

Теперь вы увидите, что иерархия папок в битбакете исправлена.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.