所以我试图在两个git命令之间创建修改过的文件列表:
shell_exec("
git diff --name-only $remoteCommitId $localCommitId > diff &&
SET /p DIFF=<diff &&
git archive --output=$zipName HEAD %DIFF%
");
但是,没有创建zip文件我还尝试将命令与&
和;
分开。如果在批处理文件中运行这些命令,一切正常。
我在Windows上,我这样做的原因是here。
我只想通过shell_exec
在两个git提交之间创建zip文件,因此欢迎通过shell_exec
工作的任何其他方法。
如果我直接在控制台上运行这些命令:
git diff --name-only 207b606c270fc14a7161647c2fbe8f9a7d8e05a1 17dcc2233678df4ce86c8713e0349d68e45c3c96 > diff&& SET /p DIFF=<diff&& git archive --output=deployment.zip HEAD %DIFF%
它确实创建了deployment.zip文件,但问题是deployment.zip文件中只包含单个根路径文件,而不包含其他文件夹(本例中为vendor):
这是差异文件:
composer.json
vendor/anlutro/l4-settings/.gitignore
vendor/anlutro/l4-settings/.travis.yml
vendor/anlutro/l4-settings/CONTRIBUTING.md
vendor/anlutro/l4-settings/LICENSE
vendor/anlutro/l4-settings/README.md
vendor/anlutro/l4-settings/composer.json
vendor/anlutro/l4-settings/phpunit.xml
vendor/anlutro/l4-settings/src/ArrayUtil.php
vendor/anlutro/l4-settings/src/DatabaseSettingStore.php
vendor/anlutro/l4-settings/src/Facade.php
vendor/anlutro/l4-settings/src/JsonSettingStore.php
vendor/anlutro/l4-settings/src/MemorySettingStore.php
但deployment.zip文件只包含composer.json
文件。
答案 0 :(得分:1)
尝试改为:
shell_exec("cmd /C \"ascript.bat\"");
使用ascript.bat脚本列出所有必要的命令 请参阅&#34; how not to open a Cmd window when running a batch file&#34;