#git #batch-file #git-describe
#git #пакетный файл #git-describe
Вопрос:
Это странная ошибка. Приведенный ниже код работает, как и ожидалось, внутри пакетного файла:
FOR /F "tokens=1,2,3,* delims=-" %%G IN (
'git describe --long --always --dirty --broken'
) do (
set tag_name=%%G
set versions_from_tag=%%H
set hash=%%I
set dirty_broken=%%J
)
Когда я пытаюсь добавить опцию —abbrev, я получаю неустранимую ошибку:
FOR /F "tokens=1,2,3,* delims=-" %%G IN (
'git describe --long --always --dirty --broken --abbrev=8'
) do (
set tag_name=%%G
set versions_from_tag=%%H
set hash=%%I
set dirty_broken=%%J
)
результаты: fatal: --dirty is incompatible with commit-ishes
но если я запускаю команду вне FOR / F, она работает так, как ожидалось:
git describe --long --always --dirty --broken --abbrev=8
выводит 2.11-13-ga03306e6-dirty
Я предполагаю, что это, вероятно, как-то связано со средой FOR /F
команды?
Комментарии:
1. попробуйте избежать знака равенства,
… --abbrev^=8'
смотрите2. смотрите robvanderwoude.com/escapechars.php
3. @elzooilogico да, это было так. не стесняйтесь отвечать. Если нет, я напишу это.
Ответ №1:
Спасибо elzooilogico.
Как подробно здесь, =
необходимо экранировать, как ^=
при использовании в теме FOR /F
команды.
Я думаю, что без escape 8 обрабатывалась как строка для фиксации.
FOR /F "tokens=1,2,3,* delims=-" %%G IN (
'git describe --long --always --dirty --broken --abbrev^=8'
) do (
set tag_name=%%G
set versions_from_tag=%%H
set hash=%%I00
set dirty_broken=%%J
)
Сработало, как ожидалось.