Git WindowsLinuxmacOS

Git: сменился только регистр имени каталога, а переименование не отображается

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

На файловых системах, где имена Assets и assets считаются одним каталогом, простая смена регистра букв может не попасть в индекс Git. При этом на сервере Linux регистр важен: импорт ./assets/... из папки Assets способен перестать работать. Исправление — явная фиксация переименования в индексе без отключения глобальной защиты и без массовых перенастроек Git.

В этой статье
  1. Что означает проблема
  2. Как отличить причины
  3. Пошаговая диагностика и решение
  4. Команды для проверки и исправления
  5. Как проверить результат и что делать, если не помогло

#Что означает проблема

На файловых системах, где имена Assets и assets считаются одним каталогом, простая смена регистра букв может не попасть в индекс Git. При этом на сервере Linux регистр важен: импорт ./assets/... из папки Assets способен перестать работать. Исправление — явная фиксация переименования в индексе без отключения глобальной защиты и без массовых перенастроек Git.

#Как отличить причины

Возможная причинаКак узнатьЧто делать
Файловая система не различает регистр имёнWindows и часть конфигураций macOS сопоставляют имена без различия регистра.В проводнике виден config, но git status пишет working tree clean.Сделать переименование через временное непересекающееся имя.
Git использует core.ignorecaseНастройка отражает способ обращения файловой системы с именами.git config --get core.ignorecase возвращает true.Не меняя настройку вслепую, используйте git mv.
Внутри репозитория уже есть конфликт имёнВ истории могут одновременно встречаться пути Config/ и config/, а ОС отображает только один.git ls-files содержит варианты регистра либо операция переименования отказывается.Работать на файловой системе с учётом регистра и согласовать структуру.

#Пошаговая диагностика и решение

  1. Откройте терминал именно из корня нужного репозиторияВ Windows откройте проект в VS Code, затем «Терминал» → «Создать терминал» (можно выбрать Git Bash). В macOS/Linux подойдёт обычный Терминал. Выполните git status -sb и посмотрите, нет ли уже других изменений. Если есть, сначала сохраните их в отдельном коммите или копии, чтобы переименование не смешалось с чужой работой. Перед остальными командами выполните git --version: в ответ должна появиться установленная версия Git. Если терминал сообщает, что git не найден, проверьте установку Git и доступность команды в этом терминале; не продолжайте операции наугад.
  2. Посмотрите, как Git запомнил имя папкиВведите git ls-files и найдите пути с предполагаемым старым именем, например Config/settings.json. Git отслеживает файлы, а не пустые каталоги; если внутри папки нет отслеживаемых файлов, отдельного переименования для Git не существует. Сравните список с реальными именами файлов в проводнике.
  3. Проверьте поведение файловой системы, не меняя конфигурациюВыполните git config --get core.ignorecase. Значение true объясняет, почему простая смена регистра может не фиксироваться. Пустой вывод означает отсутствие локально заданного параметра, не доказательство чувствительности файловой системы. Не устанавливайте автоматически core.ignorecase=false на Windows: это не превратит NTFS в чувствительную к регистру систему.
  4. Проверьте, что конечное имя и временное имя свободныОткройте каталог проекта в Проводнике/Файлах и убедитесь, что папки Config_case_tmp нигде нет. Ниже Config — только пример, а итогом будет config: замените оба имени собственными. При несоответствии или коллизии имён остановитесь; нельзя перезаписывать другое дерево файлов.
  5. Переименуйте каталог в промежуточное имя через GitВ терминале корня проекта выполните git mv Config Config_case_tmp. Если Git выдаёт bad source, сначала проверьте фактический регистр через git ls-files и что в каталоге есть отслеживаемые файлы. Если Git жалуется на незарегистрированные файлы, сохраните их копию до продолжения. Команда перемещает файлы и обновляет индекс; на важном проекте лучше выполнять в отдельной рабочей ветке.
  6. Задайте конечный регистр вторым переименованиемПосле успешного первого шага выполните git mv Config_case_tmp config. Проверьте в Проводнике, что папка теперь называется config, и выполните git status --short: в выводе должны появиться строки R (переименовано) либо D/A для перемещённых файлов. Git может показать переименование с R только при включённом определении переименований; отсутствие R само по себе не ошибка.
  7. Проверьте все пути в коде и зафиксируйте результатОткройте поиск по проекту в VS Code сочетанием Ctrl+Shift+F (на macOS — Cmd+Shift+F) и найдите старое имя Config/ в импортируемых путях. Исправьте только ссылки, для которых регистр должен стать новым; запустите тесты на окружении, различающем регистр, если оно доступно. Затем изучите git diff --cached --stat и git diff --cached --summary, выполните git commit только после проверки.
  8. Если операция не удалась, отмените перенос аккуратноДо коммита, если в ходе git mv вы не правили содержимое файлов и нет других локальных изменений, переименование можно выполнить в обратном порядке через git mv config Config_case_tmp и git mv Config_case_tmp Config. Если Git пишет destination exists, ничего не перезаписывайте: верните файлы из копии и посмотрите статус. После публикации переименования отменять его следует новым коммитом, а не принудительной переписью истории.

#Команды для проверки и исправления

Linux · Терминал (Bash)Команда
Просмотр состояния, отслеживаемых путей и настройки текущего репозитория. Без прав администратора; ничего не меняет.
git status -sb
git ls-files
git config --get core.ignorecase
Linux · Терминал (Bash)С осторожностью
Пример для каталога Config, который должен стать config; замените оба имени в двух строках. Запускайте строки ПО ОЧЕРЕДИ, убедившись в успехе первой. Создайте отдельную ветку и копию данных, особенно при наличии неотслеживаемых файлов.
git mv Config Config_case_tmp
git mv Config_case_tmp config

Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

Linux · Терминал (Bash)Команда
Показывает проиндексированные переименования и состояние без изменений файлов.
git diff --cached --summary
git status --short

#Как проверить результат и что делать, если не помогло

После коммита на другой системе или в чистом клоне git ls-files должен показывать исключительно новый регистр. Сборка/импорты должны работать и на Linux. Если присутствуют оба регистра одного пути, нужно разбирать конфликт в отдельной копии на чувствительной к регистру файловой системе.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.