Git файлы претензий изменились, когда содержимое идентично - PullRequest
1 голос
/ 12 марта 2020

Я пытаюсь ускорить мою ветку четырьмя коммитами, сделанными кем-то другим. Тем не менее, Git продолжает выдавать мне эту ошибку:

error: Your local changes to the following files would be overwritten by merge:
    path/to/file/A
    path/to/file/B
    etc.
Please commit your changes or stash them before you merge.
Aborting

Согласно Как игнорировать ошибку при 'git pull' о моих локальных изменениях, которые будут перезаписаны слиянием? Я попытался git stash push --include-untracked, затем git stash drop, но это привело к той же ошибке.

Следуя указаниям в ответе на Git, показывая идентичные файлы как измененные , я попытался rm .git/index; git reset, и это сократило список файлов, которые Git показали как измененные, но некоторые из них все еще были. git reset --hard восстановил список «измененных» файлов до его первоначального размера.

Я также попытался удалить .gitattributes (в котором есть строка text=auto), но файлы по-прежнему отображаются как измененные. Их окончания строк все равно LF, так что я сомневаюсь, что настройка окончания строки повлияет на них.

В момент отчаяния я попытался git rm -r -f ., который удалил все, кроме каталога .git, но при попытке чтобы вытащить I все еще получить ошибку об этих файлах с изменениями, которые будут перезаписаны, даже если файлы будут удалены. Конечно, когда я делаю git reset; git status, у меня все файлы восстановлены, и тот же набор файлов показывается как измененный.

Я мог бы просто удалить весь репозиторий и повторно клонировать его, но я бы хотел бы выяснить, что происходит. Что вызывает такое поведение?

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Хорошо, так что после того, как третий пользователь, работающий в той же ветке, столкнулся с той же проблемой, я еще немного покопался и нашел решение.

Наш репозиторий использует фильтр, чтобы изменить ведущие наборы из 4 пробелов на вкладки. Чтобы применить фильтр к конфигурации каждого пользователя, я написал сценарий Bash, который должен запускать каждый перед началом работы в хранилище. Этот конкретный пользователь не запустил сценарий, поэтому у него не было фильтра.

Когда я сбросил свою локальную версию репозитория, Git применил фильтр к файлам, что привело к ведущие пробелы преобразуются во вкладки и Git регистрирует изменения в файле. Удаление фильтра временно позволило мне быстро перейти к последней версии ветки.

Я до сих пор не знаю, почему Meld (доступ с помощью git difftool) не показывал различия, но когда я вручную загрузил репозиторий из сервер и проверил эти файлы по измененным файлам, Мелд показал изменения пробелов.

0 голосов
/ 12 марта 2020

Все их окончания строк в любом случае низкочастотные, поэтому я сомневаюсь, что настройка окончания строки повлияет на них.

Тем не менее, чтобы быть уверенным, проверьте вывод git config core.autocrlf.
Установите значение false: git config --global core.autocrlf false.

Затем: git add --renormalize -- :/. ( с Git 2,16 )

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