git archive"输入行太长。 "批处理文件中的错误

时间:2014-06-27 16:03:43

标签: windows git batch-file

从各种来源我设法修改了一个脚本,我发现它创建了在两个变更集之间添加或更改的文件的存档。批处理脚本如下:

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

直到今天这种情况一直很好,突然之间我又收到了以下错误:

  

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

我已经确认原因是%输出%的结果太长但不确定我是否或如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

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

由于它是Unix语法,你需要调用Git for Windows中包含的sh.exe(正如我在“What is the exact meaning of Git Bash?”中提到的那样)

OP ProNotion建议in the comments

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