Я меняю заглавные буквы в каталоге, и Git, кажется, не улавливает его

142

Я разрабатываю проект на OS X Lion, который находится под контролем версий Git. У меня были эти каталоги в нижнем регистре, а затем они были заглавными (например, emailaddresses => EmailAddresses), но Git, похоже, не распознал это изменение. Он все еще думает, что каталоги в нижнем регистре, когда я запускаю git ls-filesи другие команды.

Это безвредно, или мне нужно сделать что-нибудь еще, чтобы Git уловил это изменение?

Дан
источник
Это создало для меня замешательство на 2 дня. Теперь я понимаю. Спасибо за этот вопрос
Number945

Ответы:

202

Вероятно, вы используете HFS + без учета регистра (но с сохранением регистра). Я обычно обхожу это так:

$ git mv somename tmpname
$ git mv tmpname SomeName
Пол Р
источник
1
Это та же проблема, что и у меня, и я этим занимаюсь.
Fernferret 01
3
Была такая же проблема с инструментом Github для Windows. Опять же, приведенное выше решение отлично справляется с проблемой: переименуйте во временный файл в проводнике Windows, а затем - после фиксации - переименуйте его в окончательное имя с правильным регистром.
Джейсон
9
Или сделайте это одной командой: git mv --force somename SomeName (из stackoverflow.com/a/16071375/217866 )
jackocnr
1
Чтобы изменения отразились в удаленном репо, вам также необходимо git push origin master. Если git отказывается обновлять пульт, вам может потребоваться добавить фиктивный файл (например touch stam) и выполнить push. Затем следует последующее удаление штампа и повторное нажатие.
Rahav
2
Следует отметить, что вам нужно находиться в папке, в которой находится файл, чтобы это работало. Сначала для меня это было неочевидно, и я продолжал получать >>> bad source, source = somename, destination = tmpname <<<, потому что я пытался запустить команду из корня репо.
Парт Тамане
283

Вы можете указать git принять во внимание случай, запустив

git config core.ignorecase false

Таран
источник
4
Действительно отличный ответ, если вы уже изменили имена файлов без использования git mv --force или какого-либо другого сценария CL. Спасибо!
MeanMatt
4
Это лучший ответ, так как мне не особо хотелось git mv'ing 200 переименованных файлов вручную!
Адам Рейс
1
Согласились, что это должен быть главный ответ. Спасибо.
HomerPlata
1
по какой-то причине он продублировал все файлы, теперь у меня изменились как исходные версии, так и версии с заглавными буквами ...
Salatiel
1
@Salatiel Я думаю, он дублирует их, когда вы уже отслеживаете файл.
Игги,
37

Как git mv на Mac с учетом регистра

Это происходит потому, что Mac OS X реализует функции сохранения и нечувствительности к регистру, которые призваны помочь вам.

Хотя предложения о двойном переименовании в другом ответе будут работать, я рекомендую использовать '--force' для достижения наилучшего результата:

$ git mv --force somename SomeName


Примечание: если вы попробуете без параметра force, git вас заблокирует следующим образом:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

В приведенном выше примере команда git не работает, и файлы в файловой системе или в индексе git не изменяются.

Дэвид Манперл
источник
По первой команде получаю fatal: not under version control.
2540625 07
Эта фатальная ошибка означает, что у вас нет репозитория GIT в этом месте. gitкоманды работают только в каталогах с репозиториями GIT.
Дэвид Манперл 08
Но я был в подкаталоге моего репозитория Git ... В конце концов, я решил это с помощью ответа Тарана , BTW. Спасибо.
2540625
19

Попробуйте изменить параметр конфигурации git core.ignorecase на false в файле .gitconfig.

pooamlairaj
источник
4
или напишитеgit config core.ignorecase false
iforgotmypassword 01
2
@iforgotmypassword = ты должен был ответить на него - я бы проголосовал за тебя на самом деле
Абдели Чанданвала
4

Следующие шаги помогли мне решить проблему:

  1. Переименуйте папку в temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Этап и фиксация:

    git add .
    git commit -m "Temp"
    
  3. Переименуйте tempпапку по своему выбору:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

Готово - теперь можно нажимать.

Ренил Бабу
источник
1

Если вы сделаете git mv AAA aaaили git mv -f AAA aaa, это не будет работать, и у вас будет ошибка fatal: renaming 'AAA' failed: Invalid argument.

Поскольку AAAи aaaявляются ОДНОЙ ОДНОЙ папкой / файлом в файловых системах без учета регистра, переход AAAк aaaозначает перемещение AAAкак aaa/AAA.

Итак, вы должны сделать

git mv AAA aaa.1
git mv aaa.1 aaa

Надеюсь, это будет вам полезно.

Гапур Касым
источник
1

Причина в том, что ОС на базе LINUX или macOS игнорируют чувствительность к регистру для имени файла / папки. Нам необходимо решить эту проблему, выполнив следующие действия.

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"
giapnh
источник
0

Ни одно из этих решений не помогло мне. SourceTree всегда создавал мою ветку с другим регистром, чем я хотел. Итак, как я решил это:

1 - Посмотрите свои файлы git в Finder. Вы можете сделать это, набрав это на терминале:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - Перезапустите искатель и перейдите в каталог вашего проекта.

3 - Теперь просто измените имя папки, скажем, с функции на функцию. Вот и все.

Бруно Кунья
источник
0

Вы также можете сделать это вручную без использования команд GIT. Внутри .gitпапки, просто удалите папку с именем , которое вы хотите ИЭ SomeName. Затем переименуйте папку somenameв SomeName. Подробнее: Как исправить имя папки, установленное в верхний регистр, и git convert в нижний регистр

Таха
источник
0

У меня была такая же проблема, и я использовал решение ниже. Я использую это для пакетного переименования каталогов, файлов и т. Д .:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

Подробно здесь.

Роджер
источник
0

Ничего из этого на самом деле мне не помогло, у меня все еще был git сказать мне спрятать мои изменения, потому что моя ситуация заключалась в том, что моя локальная папка была написана с заглавной буквы, а удаленная - нет, а моя ветка была позади, и я больше не мог тянуть из-за различий в капитализации файлов в структуре папок.

Единственный способ исправить это - удалить локальную ветку и проверить удаленный.

Snickers3192
источник