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

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

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

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

git mv -f OldFileNameCase newfilenamecase
1144
ответ дан 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
754
ответ дан 17 июля '13 в 1:52
источник

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

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

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

93
ответ дан 13 нояб. '13 в 17:27
источник

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

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

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

87
ответ дан 28 окт. '16 в 17:40
источник

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

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

Mac Disk Utility Screenshot

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

git config core.ignorecase false
37
ответ дан 03 окт. '14 в 22:18
источник

Иногда бывает полезно временно изменить чувствительность к регистру в Git. Два возможных метода:

Способ 1:

git -c core.ignorecase=true checkout mybranch чтобы отключить чувствительность к регистру для одной команды checkout. Или, в более общем случае: git -c core.ignorecase= <<true or false>> <<command>>. (Благодарим VonC за предложение об этом в комментариях.)

Способ 2:

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

  1. git config core.ignorecase (возвращает текущие настройки, например, false).
  2. git config core.ignorecase <<true or false>> - установить желаемый новый параметр.
  3. ... Выполнить несколько других команд...
  4. git config core.ignorecase <<false or true>> - вернуть значение конфигурации к предыдущему значению.
15
ответ дан 10 июля '18 в 14:05
источник

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

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

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

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

git add
git commit --amend
14
ответ дан 03 окт. '16 в 22:13
источник

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

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

Приведенные ниже инструкции зависят от типа файла, который вы пытаетесь переименовать, то есть от типа файла, который GitHub считает редактируемым (код, текст и т.д.) Или недоступным для редактирования (изображение, двоичный файл и т.д.) В браузере.

  1. Посетите GitHub.com
  2. Перейдите в свой репозиторий на GitHub.com и выберите ветку, в которой вы работаете
  3. Используя инструмент навигации по файлам сайта, перейдите к файлу, который вы собираетесь переименовать
  4. GitHub позволяет вам редактировать файл в браузере?
    • а.) редактируемый
      1. Нажмите значок "Редактировать этот файл" (он выглядит как карандаш)
      2. Изменить имя файла в текстовом вводе имени файла
    • б) не редактируемые
      1. Откройте кнопку "Загрузить" в новой вкладке и сохраните файл на свой компьютер.
      2. Переименовать загруженный файл
      3. На предыдущей вкладке на GitHub.com щелкните значок "Удалить этот файл" (он выглядит как мусорная корзина)
      4. Убедитесь, что выбран переключатель "Записать непосредственно в branchname ветки" и нажмите кнопку "Зафиксировать изменения".
      5. В том же каталоге на GitHub.com, нажмите кнопку "Загрузить файлы"
      6. Загрузите переименованный файл с вашего компьютера
  5. Убедитесь, что выбран переключатель "Записать непосредственно в branchname ветки" и нажмите кнопку "Зафиксировать изменения".
  6. Локально, оформить/получить/потянуть ветку
  7. Готово
8
ответ дан 31 окт. '17 в 21:22
источник

Mac OSX High Sierra 10.13 это несколько исправляет. Просто создайте виртуальный раздел APFS для ваших проектов git, по умолчанию он не имеет ограничения по размеру и не занимает места.

  1. В Дисковой утилите нажмите кнопку +, когда выбран Контейнерный диск
  2. Выберите APFS (регистр -s в обязательном порядке) в формате
  3. Назовите это Sensitive
  4. прибыль
  5. Необязательно: Создайте папку в Sensitive с именем git и ln -s/Volumes/Sensitive/git/Users/johndoe/git

Ваш диск будет в /Volumes/Sensitive/

enter image description here

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

4
ответ дан 06 марта '18 в 18:01
источник

Я несколько раз сталкивался с этой проблемой в 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
ответ дан 05 авг. '16 в 20:23
источник

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

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

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

2
ответ дан 29 апр. '17 в 14:00
источник

Другие вопросы по меткам или Задайте вопрос