Git добавление китайского текста в XML-файлы, когда я клонирую - PullRequest
0 голосов
/ 13 марта 2019

Каждый раз, когда я клонирую / извлекаю / извлекаю репозиторий, между каждой строкой XML-файла добавляется китайский текст.Я перепробовал все, что мог придумать.

Репо поставляется с собственным файлом gitattributes.Файлы закодированы в "utf-16". Я пытался открыть его в нескольких текстовых редакторах и конвертировать.

Любая помощь будет принята с благодарностью.

Screenshot

enter image description here

1 Ответ

0 голосов
/ 13 марта 2019

Снимок экрана искаженного файла показывает, что каждая вторая строка представлена ​​в виде последовательности китайских и других символов.Сравнение со скриншотом ожидаемого содержимого файла показывает, что в результирующем файле нет неожиданных символов вставлен ;скорее, последовательности нечетных символов представлены вместо соответствующих строк из исходного файла.

Если мы допустим, что файл закодирован в UTF-16, как гласит заголовок XML, тоесть правдоподобное объяснение: вы используете Windows, и действительное значение core.autocrlf вашего клиента *1008* - true, по крайней мере, для этого файла.Получающиеся автоматические преобразования завершения строки не сделают правильную вещь, потому что они не знают UTF-16.Автоматическое преобразование завершения строки должно быть отключено , по крайней мере, для затронутого файла.

Когда активна автоматическая трансляция crlf и клиент видит терминатор строки UTF-16 в файле, который он клонируетбудь то часть (логической) последовательности CR / LF или голая LF, часть LF будет закодирована как 00 0A.Он принимает это как чистый LF, потому что его ожидаемый однобайтовый кодированный CR / LF будет 0D 0A.В результате клиент преобразует такие последовательности в 00 0D 0A, три байта вместо двух.Это выбрасывает всю следующую строку на один байт из регистра, но когда то же самое происходит в конце следующей строки, она возвращает следующую строку в регистр.Таким образом, при просмотре в редакторе, который понимает UTF-16, вы увидите чередующиеся строки правильного и неправильного текста, точно так же, как на скриншоте.

Лучший способ приблизиться к этому, вероятно, сделать целевой файл непригоднымдля полного завершения строки, гарантируя, что git видит его как двоичный файл, а не как текст (что это и есть для целей git).Вы не можете сделать это до клонирования хранилища, но вы сможете восстановить его после.Сделайте это:

  1. Клонируйте репозиторий.
  2. Отредактируйте или создайте файл .gitattributes в том же каталоге, что и проблемный XML-файл, поместив строку, которая отменяет XML-файлыатрибут 'text' в конце:

    name-of-file.xml -text
    
  3. Принудительно выполнить повторную синхронизацию целевого файла из исходного хранилища:

    1. git rm --cached name-of-file.xml
    2. git checkout HEAD -- name-of-file.xml

Возможно, стоит поискать и удалить любое назначение там или в другом месте * атрибута eolфайла XML тоже.Эти не должны быть релевантными, если файл не считается текстовым, но лучше минимизировать площадь поверхности, на которую влияют ошибки.По тем же причинам я бы порекомендовал удалить любую конфликтующую спецификацию для атрибута 'text' XML-файла.

Не забудьте зафиксировать ваш новый / измененный .gitattributes файл (-ы), по крайней мере, в вашей локальной копии.


* «В другом месте» означает в другом файле .gitattributes ближе к корню дерева, или в <repo_root>/.git/info/attributes, если таковой существует.

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