git archive“input行太长。 “batch file错误

从各种来源,我设法修改一个脚本,我发现创build一个档案,在2个变更集之间添加或更改的文件。 批处理脚本如下所示:

setlocal enabledelayedexpansion set output= for /f "delims=" %%a in ('git diff --name-only %1 %2') do ( set output=!output! "%%a" ) git archive -o export.zip HEAD %output% endlocal 

这直到今天一直很好,突然间,我得到了以下错误:

input行太长。 该命令的语法不正确。

我已经证实,这是%output%的结果太长,但不知道如果我能解决这个问题的原因?

如果你想在两次提交之间导出已更改的文件,为什么不呢(而不是依靠DOS变量被设置,并且可能太长)做一个:

 git archive --output=file.zip HEAD $(git diff --name-only SHA1 SHA2) 

由于它是一个Unix语法,所以你需要调用Git for Windows中包含的sh.exe(正如我在“ Git Bash的确切含义是什么 ”中提到的那样)

OP ProNotion 在评论中提出 :

 "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git archive -o export.zip HEAD $(git diff --name-only %1 %2)"