Ошибка: не отображаемый символ для кодировки UTF8 после слияния GIT

После очередного git pull мой проект прекратил сборку с кучей сообщений:

error: unmappable character for encoding UTF-8

Сообщения указывают на символ авторского права, найденный в некоторых заголовках файлов. Есть еще много файлов с тем же символом, но, похоже, они хорошо компилируются. При просмотре в бинарном редакторе хороший выглядит так:

C2 A9

пока плохой

A9

При просмотре в vim оба отображаются как © (<©> 169, Hex 00a9, Octal 251), но IntelliJ Idea показывает плохие как ромб.

Поэтому я решил, что что-то испортил при слиянии (возникли конфликты слияния после pull) и пошел смотреть, какие файлы были изменены с помощью

git diff-tree --no-commit-id --name-only -r --full-index --binary 91cbe7b753d39905372c1ea41e04e7a3dbd2566e

но это не дает никаких результатов. Также не найдено изменений для предыдущего коммита. Журнал выглядит так:

commit 91cbe7b753d39905372c1ea41e04e7a3dbd2566e
Merge: d7b4ae9 0dfc198
Author: Me Me <my.my@gmail.com>
Date:   Wed Dec 23 17:50:46 2015 +0100

    Merge branch 'development' of ssh://fsstash.cool.com:7999/our/server into my-branch

commit 0dfc19850b2e31d72c1d2923321430e8fc1b53cb
Merge: 724b8a7 d3478f9
Author: Good Guy <Good.Guy@gmail.com>
Date:   Wed Dec 23 14:34:33 2015 +0200

    Merge branch 'development' of ssh://fsstash.cool.com:7999/our/server into development

когда я делаю git checkout 0dfc19850b2e31d72c1d2923321430e8fc1b53cb все компилируется нормально.

Итак, вопрос: как я могу это исправить?

Под исправлением я имею в виду понимание того, что произошло, и повторное применение изменений по запросу (возможно), чтобы мне не пришлось вносить что-либо, связанное с этим исправлением, в репозиторий верхнего уровня.

Кажется, что плохим является UTF-16 (0x00A9), в то время как хорошим является UTF-8 - (0xC2 0xA9). Что могло изменить это?

Система сборки maven, но она не связана с той же ошибкой, о которой сообщает голый javac в скопированном и свернутом файле. ОС Ubuntu 15.10, локаль говорит это:

locale
LANG=ru_RU.UTF-8
LANGUAGE=ru:en
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC=ru_UA.UTF-8
LC_TIME=ru_UA.UTF-8
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY=ru_UA.UTF-8
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER=ru_UA.UTF-8
LC_NAME=ru_UA.UTF-8
LC_ADDRESS=ru_UA.UTF-8
LC_TELEPHONE=ru_UA.UTF-8
LC_MEASUREMENT=ru_UA.UTF-8
LC_IDENTIFICATION=ru_UA.UTF-8
LC_ALL=

версия Java: 1.8.0_66.

Любая помощь высоко ценится!

PS: перепробовал все --diff-алгоритма ={терпение | минимальный | гистограмма | майерс} - все еще не найдены изменения с помощью git-diff-tree

PS: git reset --hard HEAD~1, git pull origin developemnt выданные из командной строки не помогли, поэтому не имеют отношения к идее.

2 ответа

Git diff-tree в этом случае оказался неправильным. Git diff - только для имени a35f25470bc8219e3f2a45316963dde660091bcb 0dfc19850b2e31d72c1d2923321430e8fc1b53cb

обнаружил множество изменений между ветвями и одно из них - обновление конфигурации maven-compiler-plugin, которое изменило версию java с 7 на 8. И похоже, что javac 8 рассматривает кодирование как ошибки, а 7 как предупреждение (хотя пишет абсолютно идентично) ошибка: не отображаемый символ для..."предупреждение в журнале.

git diff --name-only действительно больше подходит для синтаксического анализа, как показано в Git 2.32 (Q2 2021), который поясняет, что имена путей, записанные в деревьях Git, чаще всего (но не обязательно) кодируются в UTF-8.

См. (20 апреля 2021 г.) Андрея Беньковского ( hexagonrecursion) .
(ОбъединеноJunio ​​C Hamano - gitster- в коммите 93e0b28 , 30 апр 2021 г.)

Коммит 9364bf4doc: уточните кодировку имени файла в git diff

AFAICT анализирует вывод git diff --name-only master...feature(man) - это предполагаемый способ программного получения списка файлов, измененных функциональной веткой.

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

теперь включает в свою справочную страницу :

Показывать только имена измененных файлов. Имена файлов часто кодируются в UTF-8.

diff-optionsтеперь включает в свою справочную страницу :

Как --name-only имена файлов часто имеют кодировку UTF-8..

Другие вопросы по тегам