2009-11-24 2 views
143

В нашей управляемой git-кодовой базой есть несколько файлов, которые я бы хотел переименовать. В частности, я просто хочу изменить регистр файла, так что sourceCode.java будет, например, SourceCode.java. Улов: я нахожусь в окне Windows, и файловая система думает, что это одно и то же имя файла.Изменить регистр файла в Windows?

Как я могу заставить Windows и Git распознать это изменение и проверить его?

+3

С Git 2.0.1+ (июнь 2014), простой 'мерзавец mv' должен работать (http://stackoverflow.com/a/24979063/6309). Даже в Windows. – VonC

+9

Способ пойти, закрывая этот вопрос как дубликат совершенно другого вопроса ... –

+0

не дубликат. – worc

ответ

235

Посмотрите здесь для больше подсказок о том, как это сделать:

How to make git ignore changes in case?

Или:

git mv -f name.java Name.java 
+7

В стороне это не работает в файловой системе FAT. Я переношу код проекта на флэш-накопитель, и изменения в корпусе - настоящая боль. – asm

+0

Это не сработало для меня в системе NTFS и Windows 10 – Roboblob

34

Если вы на файловом FAT системы ваш единственный выбор, чтобы сделать два этапа переименования:

  1. Rename sourceCode.java в anything.you.like
  2. Переименовать anything.you.like в SourceCode.java

Назад в дни когда мы использовали Perforce, у нас была именно эта проблема, и это было единственное решение, которое мы могли бы придумать.

+4

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

17

Следующие шаги позволили мне изменить случай на Windows:

  • Добавить ignorecase = false в [core] в .git/config;
  • Переместите файлы, которые вы собираетесь переименовать из каталога проектов;
  • Добавить удаление индекса;
  • Переместить все файлы в исходное местоположение и изменить регистр файлов и/или каталогов;
  • Добавить все "новые" файлы в индекс;
  • Удалить ignorecase = false добавлено на первом этапе.

Таким образом, у вас есть одна фиксация, содержащая переименование, и это позволяет легко изменить, например. полный каталог.

+2

Сделайте это для глобальных и локальных настроек ванны: $ gti config --global core.ignorecase false $ gti config core.ignorecase false –

+0

Это единственный подход, который сработал для меня. Благодаря! – Roboblob

4

Будьте осторожны. Это может привести к изменениям, которые невозможно слить. Git запутывается при слиянии с Windows, потому что он не может решить, является ли прежнее имя верхнего и нового строчных имен одним и тем же файлом или нет (для Git это не так, но для файловой системы они есть). Чтобы объединиться, вам необходимо выполнить рутинный обходной путь, например удаление файлов перед слиянием.

См Git rebase issue with files of same name but different case

Я не уверен, что если этот вопрос хуже, чем иметь нетрадиционно-файл с именем в проекте навсегда и когда-либо, но это стоит знать, если есть много пользователей с большим количеством ветви, которые все должны быть объединены в конечном итоге.

Смежные вопросы