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




git tag vs branch (8)

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

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

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

4) добавляет добавленный файл name.jpg к предыдущему commit

git add
git commit --amend

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


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

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

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

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


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

git mv -f OldFileNameCase newfilenamecase

Иногда бывает полезно временно изменить чувствительность регистра 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>> - установите значение конфигурации обратно в предыдущую настройку.

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

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

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


У Git есть параметр конфигурации, который указывает, будет ли регистр чувствителен к регистру или нечувствителен: core.ignorecase . Чтобы сообщить Git, чтобы он был случайным, просто установите для этого параметра значение 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

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

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

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

  1. git rm Foobar.java
  2. Зафиксируйте его сообщением, что вы не можете пропустить git commit -m 'TEMP COMMIT!!'
  3. Тянуть
  4. Это вызовет конфликт, заставляющий вас объединить конфликт, потому что ваше изменение удалило его, но другое изменение было переименовано (следовательно, проблема).
    1. Примите ваше изменение, которое является «удалением»,
    2. git rebase --continue
  5. Теперь оставьте свой обходной git rebase -i HEAD~2 и drop TEMP COMMIT!!
  6. Подтвердите, что файл теперь называется FooBar.java

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

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

  1. Посетить GitHub.com
  2. Перейдите в свой репозиторий на GitHub.com и выберите ветку, в которой вы работаете.
  3. Перейдите к файлу, который вы собираетесь переименовать, используя инструмент навигации по сайту
  4. Нажмите значок «Изменить этот файл» (он выглядит как карандаш)
  5. Изменение имени файла в текстовом входе имени файла
  6. Убедитесь, что branchname «Зафиксировать непосредственно к branchname ветви» выбран
  7. Нажмите кнопку «Зафиксировать изменения»
  8. Локально, проверка / вытягивание / выборка ветви
  9. Готово




git-config