Git описывает условную неустранимую ошибку в команде FOR /F

#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
)
  

Сработало, как ожидалось.