Я изменил имя несколько файлов с помощью де-заглавной буквы, как в Name.jpg
к name.jpg
. Git не распознает эти изменения, и мне пришлось удалить файлы и загрузить их снова. Есть ли способ, что Git может быть чувствительным к регистру при проверке изменений в именах файлов? Я не вносил никаких изменений в сам файл.
git
case-sensitive
git-commit
git-config
Гил Шульман
источник
источник
git mv
.Ответы:
Вы можете использовать git mv :
источник
-f
флаг.-f
коммутатор с последним мерзавцем (2.18) в противном случае вы можете получить сообщение обfatal: destination exists
ошибке.Git имеет настройку конфигурации, указывающую его ли быть чувствительны к регистру или нечувствительным:
core.ignorecase
. Чтобы Git учитывал регистр, просто установите для этого параметра значениеfalse
:Документация
Из
git config
документации :Нечувствительные к регистру файловые системы
Две самые популярные операционные системы, которые имеют регистронезависимые файловые системы, о которых я знаю, это
источник
false
файловой системе без учета регистра является плохой идеей . Это не обязательно очевидно. Например, я только что попробовал это на своем Mac, думая, что это решит мои проблемы, а затем переименовал файлproductPageCtrl.js
вProductPageCtrl.js
.git status
увидел новый файл с именем,ProductPageCtrl.js
но не думаю, чтоproductPageCtrl.js
он был удален. Когда я добавил новые файлы, зафиксировал их и отправил в GitHub, репозиторий GitHub теперь содержал оба файла, хотя в моем (предположительно обновленном) локальном репо был только один.git mv
для перемещения файла и посмотрите, как Git управляет им. Если вы перемещаете файл без git, git ничего не может сделать, поскольку файловая система не говорит правду git. Это проблема ntfs / fat / hfs и тому подобного, а не git / linux.Используя SourceTree, я смог сделать все это из пользовательского интерфейса
FILE.ext
вwhatever.ext
whatever.ext
вfile.ext
Это немного утомительно, но если вам нужно сделать это только с несколькими файлами, это довольно быстро
источник
Это то, что я сделал на OS X:
Два шага, потому что в противном случае я получил ошибку «файл существует». Возможно, это можно сделать за один шаг, добавив
--cached
или тому подобное.источник
-f
(сила) - это флаг, который вы ищете-f
флаг не помогает, если базовая FS не чувствительна к регистру. Однако у меня-f
работало! Спасибо за совет-f
флага.git -c "core.ignorecase=false" add .
будет рассматривать файлы, регистр которых был изменен для фиксации.Иногда полезно временно изменить чувствительность к регистру в Git:
Метод № 1 - Изменить чувствительность к регистру для одной команды:
git -c core.ignorecase=true checkout mybranch
отключить чувствительность к регистру для однойcheckout
команды. Или в более общем плане . (Благодарим VonC за предложение об этом в комментариях.)git -c core.ignorecase=
<<true or false>>
<<command>>
Метод № 2 - Изменить чувствительность к регистру для нескольких команд:
Чтобы изменить настройку на более длительный срок (например, если необходимо выполнить несколько команд, прежде чем снова ее изменить):
git config core.ignorecase
(это возвращает текущую настройку, напримерfalse
).git config core.ignorecase
<<true or false>>
- установите желаемую новую настройку.git config core.ignorecase
<<false or true>>
- верните значение конфигурации к предыдущему значению.источник
git -c core.ignorecase=<true or false> checkout <<branch>>
? Нечего сбрасывать после.В OSX, чтобы избежать этой проблемы и избежать других проблем при разработке в файловой системе без учета регистра, вы можете использовать Дисковую утилиту для создания виртуального диска с учетом регистра. / образа диска с .
Запустите утилиту диска, создайте новый образ диска и используйте следующие параметры (или измените их, как вам угодно, но сохраните их с учетом регистра):
Обязательно сообщите git, что теперь он на регистре чувствительности:
источник
Я попробовал следующие решения из других ответов, и они не сработали:
git mv filename
git rm -f filename
Если ваш репозиторий размещен удаленно (GitHub, GitLab, BitBucket), вы можете переименовать файл в источнике (GitHub.com) и принудительно переименовать файл сверху вниз.
Приведенные ниже инструкции относятся к GitHub, однако общая идея, лежащая в их основе, должна относиться к любой платформе хостинга удаленного репозитория. Помните, что тип файла, который вы пытаетесь переименовать, имеет значение, то есть, является ли это тип файла, который GitHub считает редактируемым (код, текст и т. Д.) Или недоступным для редактирования (изображение, двоичный файл и т. Д.) В браузере.
branchname
выбран переключатель «Записать ветку» и нажмите кнопку «Зафиксировать изменения».branchname
выбран переключатель «Записать ветку» и нажмите кнопку «Зафиксировать изменения».источник
Подобно ответу @ Sijmen, это то, что у меня сработало в OSX при переименовании директории (вдохновлено этим ответом из другого поста):
Простое выполнение
git mv CSS css
выдало ошибку неверного аргумента:fatal: renaming '/static/CSS' failed: Invalid argument
возможно, потому что файловая система OSX нечувствительна к региструPS Кстати, если вы используете Django, collectstatic также не распознает разницу в регистре, и вам придется делать это вручную и в статическом корневом каталоге.
источник
1) переименовать файл
Name.jpg
вname1.jpg
2) зафиксировать удаленный файл
Name.jpg
3) переименовать файл
name1.jpg
вname.jpg
4) изменить добавленный файл
name.jpg
к предыдущему коммитуисточник
fatal: bad source, source=name1.jpg, destination=name.jpg
на шаге 3. У вас есть предложение? Спасибоgit add
.Я использовал следующие шаги:
Для меня это простое решение
источник
Мы можем использовать команду git mv. Пример ниже, если мы переименовали файл abcDEF.js в abcdef.js, то мы можем запустить следующую команду из терминала
источник
Mac OSX High Sierra 10.13 это несколько исправляет. Просто создайте виртуальный раздел APFS для ваших проектов git, по умолчанию он не имеет ограничения по размеру и не занимает места.
Sensitive
git
иln -s /Volumes/Sensitive/git /Users/johndoe/git
Ваш диск будет в
/Volumes/Sensitive/
Как мне зафиксировать только изменения имени файла в Git?
источник
Я сталкивался с этой проблемой несколько раз на 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
источник
Когда вы сделали много переименований файлов, и некоторые из них - просто смена регистра, трудно вспомнить, что есть что. вручную «git moving» файл может быть довольно трудоемким. Итак, что бы я сделал во время моих задач по изменению имени файла:
Это решит все проблемы с делом, не пытаясь выяснить, какие файлы или папки вы переименовали.
источник
git commmit --amend
в пункте 4? В противном случае произойдет дополнительная фиксация с удалением всех файлов. Или вы можете использоватьgit rebase -i
с тыквой.Если ничего не работает, используйте git rm filename, чтобы удалить файл с диска и добавить его обратно.
источник
Я взял ответ @CBarr и написал скрипт на Python 3, чтобы сделать это со списком файлов:
источник