Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 通过批处理文件在GIT中创建已修改文件的存档_Windows_Git_Batch File - Fatal编程技术网

Windows 通过批处理文件在GIT中创建已修改文件的存档

Windows 通过批处理文件在GIT中创建已修改文件的存档,windows,git,batch-file,Windows,Git,Batch File,我使用此git命令创建在特定提交中修改的文件的存档: git archive -o update.zip HEAD $(git diff --name-only COMMITID^) 其中COMMITID是我要归档的提交的id。这在命令行中运行良好,但我想从批处理文件中运行它。以下是我正在使用的批处理文件的内容: git archive -o update.zip HEAD $(git diff --name-only %1^^) 其中%1是通过SourceTree传入的提交id。我遇到的问

我使用此git命令创建在特定提交中修改的文件的存档:

git archive -o update.zip HEAD $(git diff --name-only COMMITID^)
其中COMMITID是我要归档的提交的id。这在命令行中运行良好,但我想从批处理文件中运行它。以下是我正在使用的批处理文件的内容:

git archive -o update.zip HEAD $(git diff --name-only %1^^)
其中%1是通过SourceTree传入的提交id。我遇到的问题是,从批处理文件运行此命令时返回以下错误:

错误:未知选项“仅名称”

我猜可能会有一些角色逃避的问题,但我无法找到具体的突破点

我应该如何编写git命令,以便它可以从批处理文件中工作

更新

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

致命:未找到路径:$(git

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

进一步更新

事实证明,我的语法错误,只从特定提交中获取修改过的文件,但使用msandiford的答案,我想出了这个批处理文件脚本,它工作得非常好:

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

假设您需要的是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
命令的文档是。

如果在批处理文件中的
git archive
命令前面放一个
echo
,它是否会显示您希望它显示的内容?是的,它似乎格式正确echo输出中的y。确保您的命令中没有奇怪的字符。我碰巧在命令中有“不可见”的控制字符…我检查并验证了没有错误字符。这是Windows
.bat
文件还是cygwin bash脚本?我认为您不能使用
$(foo)
要在Windows
.bat
文件中获取命令的输出,您需要为/f“delims=“%%a in('git diff--name only%1^^')使用奇怪且模糊的
,设置output=%%a
,然后在后续命令中使用
%output%
。您可能应该将其引用为
%output%”
也是。如果我有一组较大的文件,并且收到错误“输入行太长。命令语法不正确”,我该怎么办?