Git проблемы с чувствительностью к регистру и специальные символы - PullRequest
0 голосов
/ 25 мая 2018

У меня есть удаленный репозиторий на github, который синхронизируется с моим macbook и живым сервером (unix).В настоящее время я не могу вытащить или протолкнуть мой macbook на удаленный компьютер со следующей ошибкой:

error: cannot pull with rebase: You have unstaged changes.
error: please commit or stash them.

У меня есть 4 файла в локальной рабочей копии:

modified:   app/webroot/files/uploads/ABC.png

Untracked files:
(use "git add <file>..." to include in what will be committed)

app/webroot/files/get/Ä Ö ü.pdf
app/webroot/files/uploads/xyz Übc.png
app/webroot/files/uploads/def äbc.png

Все 4 связанных файла приходятот пользовательских загрузок на сервер (которые, вероятно, должны были быть проигнорированы gitignore, но теперь мы здесь ...)

Первый / измененный файл (ABC.png), вероятно, из-за нечувствительности к регистру на моем macbookпотому что в репозитории есть и abc.png, и ABC.png.Тем не менее, поскольку они загружаются на сервер клиентов, я не могу просто удалить ни одну из них.Так что это первая проблема, которую я не могу обойти прямо сейчас.

Что касается других файлов, я абсолютно не знаю, как от них избавиться.В других случаях дубликатов нет, поэтому я подозреваю специальные символы.Я удалил весь локальный репозиторий и снова клонировал его, он сразу же поставляется с этими 4 файлами, и все, что я до сих пор пробовал, не работало (git clean -ndx, git reset --hard, git fetch со всеми видами параметров).

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

Я надеюсь, что какой-нибудь специалист по git может помочь мне здесь!

1 Ответ

0 голосов
/ 25 мая 2018

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

Проблема только в том, что вы подозреваете: ваша хост-ОС предъявляет особые требования к именам файлов (именам путей), которых Git не делает.т, и что кто-то с помощью Git нарушил. Git не волнует, что кто-то там сделал и ABC.png, и abc.png; Git может хранить оба этих пути по отдельности;но в вашем рабочем дереве , где вы будете выполнять свою собственную работу, ваш компьютер заботится о и отказывается разрешить вам иметь оба файла.Имена файлов с помощью умлаутов похожи, но несколько отличаются: в UTF-8 такие имена можно выражать либо как последовательности составления символов, либо с использованием кодовых точек, в которых умлаут встроены.Git позволяет и то, и другое, но MacOS заставляет вас использовать имена, которые предпочитает MacOS.

Это означает, что для работы с этим репозиторием вы должны работать без использования рабочего дерева - или, по крайней мере, без использования обычной работы GitМеханизмыЭто возможно, но, как правило, слишком болезненно, сделать это, используя git update-index, который позволяет работать с необработанными байтовыми строками, и git cat-file -p, который позволяет извлекать лежащие в основе объекты Git по хэш-идентификатору.

Самый простойметод для решения этой проблемы на Mac заключается в установке Linux на виртуальной машине, например, с помощью vagrant.Затем у вас есть система Linux, которая делает , позволяющая иметь файлы с обоими именами, и не пытается применить нормализацию Unicode к именам UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...