@mletov

Учитывает ли Git регистр имени файла и как его поменять?

Проблема такая:
Есть в проекте файл, скажем Hello.cs. Все нормально работает.

Но если перейти на какой-нибудь старый коммит, а потом вернуться обратно на последний, то файл будет называться hello.cs.
Та же история для тех, кто клонирует репозиторий. Все получают файл с именем с маленькой буквы.

Т. е. Git где-то запомнил имя файла в нижнем регистре и принципиально не хочет отдавать правильное.

PS Ну понятно, что можно вообще дать файлу другое имя, но хотелось бы сохранить это.
  • Вопрос задан
  • 312 просмотров
Решения вопроса 2
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
По сути вопроса:
git config --show-origin core.ignoreCase
Покажет, где установлено. Я во всех репах после инициализации или клонирования даю:
git config --unset core.ignoreCase
По умолчанию Git различает регистр, но шаблон конфига для Windows выставляет core.ignoreCase = true.

А вот старые коммиты останутся как есть. Если вам важен регистр, нужно взять git-filter-repo и перебить репу. Примерно так:
git filter-repo --force --prune-empty always --prune-degenerate always --path-rename hello.cs:Hello.cs

Вместо одиночного или нескольких --path-rename можно написать целую простыню переименований в отдельном файле. Поддерживаются регулярки. Читайте доку, короче.

Оно перебьет хеши измененных коммитов, то есть репу придется загружать на сервер/GitHub заново, но тут уже ничего не попишешь: или один раз исправить, или продолжать мучиться.
Ответ написан
@mletov Автор вопроса
Спасибо за ответы.
Решил проблему в лоб: удалил файл из проекта, закомитил, потом снова добавил и закомитил.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ValdikSS
@ValdikSS
Дело, вероятно, в вашей файловой системе, а не в Git. У вас, полагаю, Windows?
В Windows не учитывается регистр файлов. Если вы попробуете записать данные в файл "test" и в файл "tEst", обе записи выполнятся в один файл, а имя ему выберется в зависимости от порядка записи.
Ответ написан
@rPman
Попробуй переименовать файл
git mv -f hello.cs Hello.cs
если он не будет давать это сделать на твоем текущем репозитарии, переименуй файл сначала обычными средствами файловой системы в hello.cs а потом с помощью git-mv
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы