1

这是一个奇怪的问题。下面的代码在批处理文件中按预期工作:

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

4

1 回答 1

0

感谢 elzooilogico。

如此处详述,=需要像^=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
)

按预期工作。

于 2019-03-29T12:58:12.117 回答