Как внести изменения в имена файлов только с учетом регистра в Git?

Я изменил имя нескольких файлов, разделив первую букву, как в Name.jpg, на Name.jpg. Git не распознает эти изменения, и мне пришлось удалить файлы и загрузить их снова. Есть ли способ, который Git может быть чувствителен к регистру при проверке изменений имен файлов? Я не внес никаких изменений в сам файл.

670
задан Gil Shulman 16 июля '13 в 20:41
источник поделиться

9 ответов

Вы можете использовать git mv:

git mv -f OldFileNameCase newfilenamecase
862
ответ дан Keith Smiley 03 янв. '14 в 18:57
источник поделиться

Git имеет параметр конфигурации, который сообщает ему, должен ли быть чувствительным к регистру или нечувствительным: core.ignorecase. Чтобы сообщить Git значение case-senstive, просто установите для этого параметра значение false:

git config core.ignorecase false

Документация

Из git config документация:

core.ignorecase

Если значение true, этот параметр позволяет использовать различные способы обхода, чтобы Git работал лучше в файловых системах, которые не чувствительны к регистру, например FAT. Например, если список каталогов обнаруживает makefile, когда Git ожидает makefile, Git будет считать, что это действительно тот же файл, и продолжать запоминать его как makefile.

Значение по умолчанию - false, кроме git -clone (1) или git -init (1) будет проверять и устанавливать core.ignorecase true, если это необходимо, когда создается репозиторий.

Нечувствительные к регистру файловые системы

Две самые популярные операционные системы, которые не имеют файловых систем без регистра, которые я знаю, являются

  • для Windows
  • OS X
544
ответ дан user456814 17 июля '13 в 1:52
источник поделиться

Это то, что я сделал на OS X:

git mv File file.tmp
git mv file.tmp file

Два шага, потому что в противном случае я получил ошибку "файл существует". Возможно, это можно сделать за один шаг, добавив --cached или такой.

71
ответ дан Sijmen Mulder 13 нояб. '13 в 17:27
источник поделиться

В OSX, чтобы избежать этой проблемы и избежать других проблем с разработкой в ​​файловой системе без учета регистра, вы можете использовать Disk Utility для создания образа диска с жестким диском/образа диска.

Запустите утилиту диска, создайте новый образ диска и используйте следующие настройки (или измените по своему усмотрению, но сохраните его с учетом регистра):

Mac Disk Utility Screenshot

Обязательно сообщите git, что теперь он находится на чувствительном к регистру FS:

git config core.ignorecase false
31
ответ дан user1821510 03 окт. '14 в 22:18
источник поделиться

Используя SourceTree, я смог сделать все это из пользовательского интерфейса

  • Переименуйте FILE.ext в whatever.ext
  • Этап
  • Теперь переименуем whatever.ext в FILE.ext
  • Снова повторите этот файл

Это немного утомительно, но если вам нужно всего лишь сделать это несколько файлов, это довольно быстро

27
ответ дан Chris Barr 28 окт. '16 в 17:40
источник поделиться

1) переименуйте файл Name.jpg в name1.jpg

2) зафиксировать удаленный файл Name.jpg

3) переименуйте файл name1.jpg в Name.jpg

4) добавляет добавленный файл Name.jpg к предыдущему фиксации

git add
git commit --amend
8
ответ дан razon 03 окт. '16 в 22:13
источник поделиться

Я несколько раз сталкивался с этой проблемой в MacOS. Git чувствителен к регистру, но Mac сохраняет только регистр.

Кто-то фиксирует файл: Foobar.java и через несколько дней решает переименовать его в Foobar.java. Когда вы вытаскиваете последний код, он терпит неудачу с The following untracked working tree files would be overwritten by checkout...

Единственный надежный способ, который я видел, это исправление:

  • git rm Foobar.java
  • Закрепите его сообщением, которое вы не можете пропустить git commit -m 'TEMP COMMIT!!'
  • Прицепные
  • Это вызовет конфликт, который заставит вас объединить конфликт - потому что ваше изменение удалило его, но другое изменение было переименовано (следовательно, проблема).
    • Примите ваше изменение, которое является "удалением"
    • git rebase --continue
  • Теперь оставьте свое обходное решение git rebase -i HEAD~2 и drop TEMP COMMIT!!
  • Подтвердите, что файл теперь называется Foobar.java
3
ответ дан Ashwin Jayaprakash 05 авг. '16 в 20:23
источник поделиться

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

  • удалите все файлы и папки без git в другую папку/репозиторий.
  • фиксировать текущую пустую папку git (это будет отображаться по мере удаления всех файлов.)
  • добавить все файлы обратно в исходную папку git/репозиторий.
  • фиксировать текущую непустую папку git.

Это устранит все проблемы, не пытаясь определить, какие файлы или папки вы переименовали.

1
ответ дан Ricardo Virtudazo Jr 29 апр. '17 в 14:00
источник поделиться

Я попробовал следующие решения из других ответов, и они не работали:

Если ваш репозиторий размещен на GitHub, как мой, вы можете переименовать файл по происхождению (GitHub.com) и заставить файл переименовать сверху вниз. Вот что я сделал:

  • Посетить GitHub.com
  • Перейдите в свой репозиторий на GitHub.com и выберите ветку, в которой вы работаете.
  • Перейдите к файлу, который вы собираетесь переименовать, используя инструмент навигации по файлу сайта.
  • Нажмите значок "Изменить этот файл" (он выглядит как карандаш)
  • Измените имя файла в текстовом входе имени файла
  • Убедитесь, что переключатель "Commit direct to branchname branch" выбран
  • Нажмите кнопку "Зафиксировать изменения"
  • Локально проверяйте ветку
    • Если вы используете клиент GitHub Desktop, нажмите кнопку "Синхронизация"
  • Готово
0
ответ дан gmeben 31 окт. '17 в 21:22
источник поделиться

Другие вопросы по меткам