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

98

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

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

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

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

JAkk
источник
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 .

Manojlds
источник
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

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

Нитеш Гоял
источник