Git изменить регистр имен файлов

Обновлено: 03.07.2024

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

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

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

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

core.ignorecase

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

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

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

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

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

  1. переименовать FILE.ext в whatever.ext
  2. Этап этот файл
  3. Теперь переименовать whatever.ext в file.ext
  4. Этап этот файл снова

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

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

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

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

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

Mac Disk Utility Screenshot

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

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

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

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

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

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

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

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

Я пытаюсь переименовать файл, чтобы в нем были заглавные буквы, отличные от того, что было раньше:

Как видите, Git доводит это до ума. Я попытался переименовать, используя только старую команду mv , но Git не принимает переименование (как переименование или как новый неотслеживаемый файл).

Как я могу изменить имя файла так, чтобы оно было написано разными заглавными буквами? Я использую Mac OS X v10.7.3 (Lion) с Git 1.7.9.1, использую оболочку Z ( zsh) 4.3.15.

Начиная с Git 2.0.1 (25 июня 2014 г.), git mv будет работать только в ОС без учета регистра .

mv : разрешить переименование для исправления регистра в файловых системах без учета регистра

" git mv hello.txt Hello.txt " в файловой системе без учета регистра всегда вызывает ошибку " destination already exists ", потому что эти два имени относятся к одному и тому же пути с точки зрения файловой системы и требуют от пользователя указания " --force " "при исправлении регистра пути, записанного в индексе, и в следующем коммите.

Обнаружьте этот случай и разрешите его, не требуя " --force ".

git mv hello.txt Hello.txt просто работает ( --force больше не требуется).

И переименуйте файл напрямую; git добавить и зафиксировать.

Я получил следующие изменения в Windows в Sourcetree:

enter image description here

Решил, удалив файл из файловой системы:

enter image description here

Затем просто удалите файл, который я хочу сохранить, и зафиксируйте:

enter image description here

Теперь все заработало как положено.

enter image description here

На основании этого ответа:

Этот фрагмент кода Python git mv --force переводит все файлы в каталог в нижний регистр. Например, foo / Bar.js превратится в foo / bar.js через git mv foo/Bar.js foo/bar.js --force .

Измените его по своему вкусу. Я просто подумал, что поделюсь :)

Чтобы перевести файлы git mv в нижний регистр в macOS и git bash в Windows, выполните следующие действия:

Все файлы в папке будут строчными.

Вы можете открыть каталог «.git», а затем отредактировать файл «config». В наборе "[core]" установите "ignorecase = true", и все готово;)

Установите для ignorecase значение false в git config

Поскольку исходный пост посвящен «изменению заглавных букв в именах файлов в Git»:

Если вы пытаетесь изменить регистр букв в имени файла в своем проекте, вам не нужно принудительно переименовывать его из Git. IMO, я бы предпочел изменить регистр букв в моей IDE / редакторе и убедиться, что я правильно настроил Git, чтобы получить переименование.

По умолчанию шаблон Git настроен на игнорирование регистра (без учета регистра в Git). Чтобы убедиться, что у вас есть шаблон по умолчанию, используйте --get , чтобы получить значение для указанного ключа. Используйте --local и --global , чтобы указать Git, следует ли выбирать конфигурационную пару "ключ-значение" из конфигурации локального репозитория Git или из глобальной. Например, если вы хотите найти свой глобальный ключ core.ignorecase :

Если это возвращает true , обязательно установите его как:

(Убедитесь, что у вас есть соответствующие разрешения для глобального изменения.) Вот и все; теперь ваша установка Git не будет игнорировать заглавные буквы и рассматривать их как изменения.

В качестве предложения, если вы работаете над многоязычными проектами и считаете, что не все проекты должны учитываться Git с учетом регистра, просто обновите локальный файл core.ignorecase .

Имена файлов в OS X не чувствительны к регистру (по умолчанию). Это скорее проблема ОС, чем проблема Git. Если вы удалите и прочитаете файл, вы должны получить то, что хотите, или переименовать его во что-то другое, а затем переименовать обратно.

Иногда вы хотите изменить регистр многих имен файлов в файловой системе без учета регистра (например, в OS X или Windows). Выполнение команд git mv быстро утомляет. Чтобы упростить задачу, я делаю следующее:

  1. Переместите все файлы из каталога, например, на рабочий стол.
  2. Сделайте git add . -A , чтобы удалить все файлы.
  3. Переименуйте все файлы на рабочем столе в правильные заглавные буквы.
  4. Верните все файлы в исходный каталог.
  5. Сделайте git add . . Git должен увидеть, что файлы переименованы.

Теперь вы можете сделать коммит, сказав, что вы изменили регистр имени файла.

Учитывая ответ larsks, вы можете заставить его работать с одиночная команда с "--force":

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

ОТВЕТЫ

Ответ 1

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

Ответ 2

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

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

core.ignorecase

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

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

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

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

Ответ 3

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

  1. Переименовать FILE.ext в whatever.ext
  2. Подготовьте этот файл
  3. Теперь переименуйте whatever.ext file.ext в file.ext
  4. Поместите этот файл снова

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

Ответ 4

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

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

Ответ 5

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

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

Mac Disk Utility Screenshot

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

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

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

Ответ 9

Подобно ответу @Sijmen, это то, что у меня сработало в OSX при переименовании директории (вдохновлено этим ответом из другого поста):

Простое выполнение git mv CSS css выдало ошибку неверного аргумента: fatal: renaming '/static/CSS' failed: Invalid argument возможно, потому что файловая система OSX нечувствительна к регистру

PS Кстати, если вы используете Django, collectstatic также не распознает разницу в регистре, и вам придется делать это вручную и в статическом корневом каталоге.

Ответ 10

Я использовал следующие шаги:

Для меня это простое решение

Ответ 11

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

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

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

enter image description here

Ответ 12

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

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

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

Ответ 13

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

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

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

Ответ 14

Если ничего не работает, используйте git rm filename, чтобы удалить файл с диска и добавить его обратно.

Ответ 15

Я взял @CBarr ответ и написал скрипт на Python 3, чтобы сделать это со списком файлов:

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

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

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

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

если true, этот параметр позволяет различные обходные пути, чтобы ЖКТ лучше работать на файловых системах, которые не чувствительны к регистру, как жир. Например, если список каталогов находок из Makefile`, когда ГИТ ожидает "формирование файла", то git будет предположить, что это действительно один и тот же файл, и продолжают помнить его как "формирование файла".

значением по умолчанию является false, за исключением ГИТ-клон(1) или ГИТ-инит(1) будет зонд и установить ядро.параметром ignorecase` true, если соответствующие при создании репозитория.

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

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

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

  1. Переименовать файл .ВН " на " что угодно.доб
  2. Этап этот файл
  3. Теперь переименовать чего-то.доб "файл".доб`
  4. Этап, что файл снова

Это то, что я сделал на ОС Х:

Двух шагах, потому что в противном случае у меня существует файл “ошибка”. Наверное, это можно сделать в один шаг, добавив --кэшированные или подобные.

ГИТ-с ядром.параметром ignorecase=истина mybranch кассе чтобы отключить чувствительность к регистру для команды один "оформить заказ". Или более обобщенно: ГИТ-с ядром.параметром ignorecase= <<true или false>> <<команда>> . (Кредит VonC за то, что в комментариях.)

Способ № 2 - изменение чувствительности для нескольких команд:

Для изменения настройки дольше (например, если несколько команд необходимо выполнить перед изменением его обратно):

  1. ГИТ конфиг ядра.параметром ignorecase (это возвращает текущую настройку, например, "ложь").
  2. ГИТ конфиг ядра.параметром ignorecase <<true или false>> - установите нужный новой установки.
  3. . Запускать несколько других команд.
  4. ГИТ конфиг ядра.параметром ignorecase <<false или True>> - заданное значение конфигурации обратно к предыдущей настройке.

Под OSX, чтобы избежать этой проблемы и избежать других проблем с развивающимися в нечувствительной к регистру файловой системы, вы можете использовать утилиту диска для создать чехол sensitive виртуальный диск / образ диска.

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

Утилиты Mac Диск Скриншот

Убедитесь в том, чтобы сообщить git сейчас на регистру ФС:

переименовать файл Name.jpg в name1.jpg

совершения удален файл Name.jpg`

переименовать файл name1.jpg в name.jpg

скорректировать добавлен файл `name.jpg к предыдущей фиксации

Я использовал следующие шаги:

ГИТ РМ -Р --кэшированные . в Git добавить-все . коммит в git'е -а-м;версионирование неотслеживаемые файлы и quot и" git толчок происхождение мастер Для меня это простое решение

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

  1. В Дисковой утилите, нажмите на кнопку+, пока контейнер диск выбран
  2. Выберите APFS (с учетом регистра) в формате
  3. Назовите его "чувствительные"
  4. Прибыль
  5. Необязательно: создайте папку в чувствительной называется мерзавец и ЛН-з /объемы/чувствительной/ГИТ /пользователи/пользователь johndoe/ГИТ

Ваш диск будет в /объемы/чувствительной/

Введите описание изображения здесь

Кто-то совершал файл: Foobar.java и через несколько дней решает переименовать его в FooBar.java . Когда вы тянете последний код выдает следующий неотслеживаемые файлы рабочего дерева будут переписаны на кассе.

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

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

Если ничего не получилось используйте команду git rm имя файла удалить файл с диска и добавить его обратно.

Я взял @CBarr ответ и написал скрипт на Python 3, чтобы сделать его список файлов:

импорт ОС импорт shlex импорт подпроцесса

деф run_command(absolute_path, имя_команды): печать( "не работает" и, имя_команды, absolute_path )

команда = shlex.сплит( имя_команды ) command_line_interface = подпроцесса.К popen( команды в stdout=подпроцесса.Трубы, чвд=absolute_path )

вывод = command_line_interface.общаться()[0] печать( вывод )

деф главным образом(): FILENAMES_MAPPING = \ [ (Р"и F:\SublimeText\Data", Р"в ридми.И quot МД; Р"в ридми.на&quot МД;), (Р"и F:\SublimeText\Data\Packages\Alignment", Р"в ридми.и quot МД; Р"в ридми.на&quot МД;), (Р"и F:\SublimeText\Data\Packages\AmxxEditor", Р"в ридми.И quot МД; Р"в ридми.на&quot МД;), ]

если имя = = и"основнойи": главная() ``

Читайте также: