Git 描述 FOR /F 命令中的条件性致命错误

Git describe conditional fatal error in FOR /F command

这很奇怪。下面的代码在批处理文件中按预期工作:

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 命令的环境有关?

感谢 elzooologico。

详述here=FOR /F命令的主题中使用时需要像^=一样转义。

如果没有转义,我认为 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
)

按预期工作。