首页 > 解决方案 > Git 描述 FOR /F 命令中的条件性致命错误

问题描述

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

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

标签: gitbatch-filegit-describe

解决方案


感谢 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
)

按预期工作。


推荐阅读