Windows git档案馆“;输入行太长&引用;批处理文件中出现错误

Windows git档案馆“;输入行太长&引用;批处理文件中出现错误,windows,git,batch-file,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 这在今天之前一直很有效,我突然

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

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
这在今天之前一直很有效,我突然发现以下错误:

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


我已确认原因是%output%的结果太长,但不确定是否或如何解决此问题?

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

因为它是Unix语法,所以需要调用Git for Windows中包含的sh.exe(正如我在“”中提到的)

委员会建议:


您使用了哪些不同的来源来组合您的脚本?不确定它有什么帮助,但这里有一个url,这里是我用来帮助的另一个url。在我开始工作之前,我还拜访了很多其他人。作为最后的手段,我将尝试迭代每个文件并将其复制到一个文件夹(如果可以的话)。因为$(…)在windows命令提示符下不起作用-至少对我来说不起作用。我得到的结果是
错误:未知选项'name only'
@pro它会,在git Bash中,但我认为这不能通过批处理文件来完成,因为该过程是自动化的?不过,我将进一步探讨这个选项,虽然它的工作原理是使用您提供的命令从批处理文件调用Bash,如下所示:
“C:\Program Files(x86)\Git\bin\sh.exe”-login-I-C“Git archive-o export.zip HEAD$(Git diff--name only%1%2)”
@ProNotion看起来不错!我在答案中加入了该命令行以提高可见性,并在Git for windows中包含的
sh.exe
之前提供了一个链接。
git archive --output=file.zip HEAD $(git diff --name-only SHA1 SHA2)
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git archive -o export.zip HEAD $(git diff --name-only %1 %2)"