Знаки ударения в выводе git diff - PullRequest
2 голосов
/ 05 мая 2020

Я пытаюсь создать сценарий / программу для автоматизации процесса сборки. Моя основная цель - создать файл .zip на основе фиксации из git. Я использую git diff для этого, чтобы вывести список файлов, измененных в этой фиксации, я использую следующую команду:

git  --no-pager diff --no-renames --name-only --diff-filter=ACM <commit_id>

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

db / alterações / 2020-04-30. sql

, и она возвращается в виде этого списка:

db /altera\303\247\303\265es/2020-04-30.sql

Как сделать, чтобы git возвращал специальные символы вместо этих кодов?

1 Ответ

5 голосов
/ 05 мая 2020

Git создает эти имена файлов с использованием значения core.quotePath, которое по умолчанию равно true. Когда эта опция истинна, байты с установленным верхним битом заключаются в восьмеричные кавычки. Когда опция ложна, это не так, но другие управляющие символы остаются.

Кроме того, если вы используете -z, Git создает строки с завершающим NUL и не помещает символы в кавычки. Это также имеет то преимущество, что изящно работает с символами новой строки и табуляции, если они появляются в именах файлов.

Итак, если ваша программа может обрабатывать байты NUL как терминаторы, напишите это: нет, можно написать так:

git -c core.quotepath=false --no-pager diff --no-renames --name-only --diff-filter=ACM \
    <commit_id>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...