通过batch file在GIT中创build修改文件的存档

我正在使用这个git命令来创build在特定提交中修改的文件的存档:

git archive -o update.zip HEAD $(git diff --name-only COMMITID^) 

其中COMMITID是我要归档的提交的ID。 这从命令行工作正常,但我想从batch file运行它。 以下是我正在使用的batch file的内容:

 git archive -o update.zip HEAD $(git diff --name-only %1^^) 

其中%1是通过SourceTree传入的提交ID。 我遇到的问题是,从batch file运行时,此命令返回以下错误:

错误:未知选项`name-only'

我猜可能会有一些字符转义的问题,但我无法find具体的中断。

我将如何编写该git命令,以便它可以从batch file中工作?

UPDATE

我尝试删除–name-only选项,并通过SourceTree尝试批处理脚本时收到以下错误:

致命的:找不到path:$(git

希望这有助于缩小可能发生的事情。

进一步更新

原来我的语法只是从特定的提交抓取修改的文件,但使用msandiford的答案是错误的我想出了这个batch file脚本,完美的作品:

 setlocal enabledelayedexpansion set output= for /f "delims=" %%a in ('git diff-tree --no-commit-id --name-only -r %1^^') do ( set output=!output! "%%a" ) git archive -o update.zip HEAD %output% endlocal 

Solutions Collecting From Web of "通过batch file在GIT中创build修改文件的存档"

假设你需要一个Windows批处理文件,而不是一个bash脚本,这里是一个最小的批处理文件,可以做你想做的:

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

它通过将git diff ...命令输出的所有行收集到一个环境变量中,然后使用它执行git archive ...操作。

Windows for命令的文档在这里 ,包括/f开关。 这里是setlocal命令的文档。