Чтобы Git зафиксировал изменение имени файла, в котором меняется только регистр букв — например, с readme.md на README.md, — выполните команду git mv из репозитория в Терминале, а затем проверьте подготовленные изменения с помощью git status. На многих компьютерах Mac формат APFS по умолчанию сохраняет регистр имен файлов, но не различает имена по регистру, поэтому переименование через Finder или обычную команду mv может привести к тому, что Git не распознает разницу. Apple отмечает, что APFS также может быть отформатирована с учетом регистра, поэтому поведение зависит от конкретного тома. Apple Developer: Files and directories

Переименование отслеживаемого файла с помощью git mv

В Терминале перейдите в репозиторий, содержащий файл. Замените примеры путей ниже точными текущими и желаемыми путями. Заключение каждого пути в кавычки является хорошей практикой, если имя содержит пробелы или метасимволы оболочки.

git mv 'src/readme.md' 'src/README.md'
git status

Команда Git git mv переименовывает путь в рабочем дереве и обновляет индекс; изменение индексируется (staged), но для него все еще требуется коммит. Руководство по Git требует, чтобы исходный путь существовал, и указывает, что обновление индекса происходит после успешного перемещения. Задокументированный рабочий процесс GitHub для командной строки также рекомендует проверять git status после git mv. Документация git-mv GitHub Docs: Переименование файла

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

git diff --cached --summary
git diff --cached -- 'src/README.md'

Сводка (--summary) помогает подтвердить изменение пути; вторая команда позволяет просмотреть подготовленное содержимое для этого пути. В некоторых контекстах Git может отображать переименование как удаление и добавление, поскольку факт переименования вычисляется на основе содержимого файла и истории. Главное, в чем здесь нужно убедиться — это то, что индекс содержит желаемый путь и в нем нет непреднамеренных подготовленных изменений.

Если прямое переименование только с изменением регистра не удается

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

git mv 'src/readme.md' 'src/readme-case-tmp.md'
git mv 'src/readme-case-tmp.md' 'src/README.md'
git status

Временный путь не должен существовать заранее. После выполнения обеих команд убедитесь, что статус показывает только запланированное переименование старого имени в новое, и проверьте подготовленный diff. Этот двухэтапный метод предоставляет файловой системе промежуточное имя для различения, в то время как git mv обновляет индекс Git на каждом успешном шаге. Если какая-либо из команд выдаст ошибку, остановитесь и проверьте git status и директорию перед повторной попыткой; не добавляйте флаг -f, пока не убедитесь, что перезапись целевого файла выполняется намеренно.

Проверка обработки регистра в репозитории

Параметр Git core.ignoreCase включает обходные механизмы для файловых систем, не различающих регистр букв. В документации Git указано, что команды clone и init опрашивают файловую систему и устанавливают это значение при необходимости; там также содержится предупреждение, что его изменение может привести к неожиданному поведению. Вы можете проверить действующее значение с помощью: Документация git-config

git config --get core.ignoreCase

Если значение не выведено, значит, эта команда не нашла соответствующей настройки в действующей конфигурации. Не рассматривайте выполнение git config core.ignoreCase false как решение проблемы: это изменит предположения самого Git, но не сделает нечувствительный к регистру том macOS способным хранить два имени в одной папке, различающиеся только регистром. Документированное назначение этого параметра — помочь Git адаптироваться к реальному поведению файловой системы, а не изменить это поведение.

Подтверждение, фиксация и отправка переименования

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

git commit -m "Rename readme file to uppercase"

Если вы планируете поделиться коммитом, отправьте ветку (push), используя стандартный для вашего репозитория рабочий процесс с удаленными репозиториями и ветками. Переименование зафиксировано в коммите; удаленный репозиторий получит его только после отправки. На томе APFS с учетом регистра имена, различающиеся только регистром, могут существовать раздельно, тогда как конфигурация по умолчанию без учета регистра воспринимает их как одно и то же имя. Надежным способом локальной проверки остается проверка того, что индекс Git и статус подготовленных изменений показывают желаемый целевой путь. Служба поддержки Apple: Форматы файловой системы, доступные в Дисковой утилите на Mac

Источники