如何通过PHP打包Git版本库中两个版本之间的差异文件?
- 作者: 五速梦信息网
- 时间: 2026年04月20日 04:47
PHP作为脚本语言,很多时候我们更新程序都只需要把修改过的文件重新上传覆盖一下就行。
实现过程
通过Git Diff命令可以识别出所有被修改的文件,把这些文件的路径信息提交给PHP CLI脚本,然后由PHP进行压缩。
1. 实例代码
文件压缩借助“alchemy/zippy”进行实现
<?php
/*
* @author 爱心发电丶
* 打包git diff 之后的文件
* */
include_once __DIR__ . '/vendor/autoload.php';
use Alchemy\Zippy\Zippy;
use Symfony\Component\Filesystem\Exception\IOException;
$map = getcwd(); //工作目录
/*
* 拆解文件目录
* */
try {
$files = explode("\n", file_get_contents($map . '/diff.txt'));
$dir_list = []; //目标文件
} catch (Throwable $e) {
exit('打包失败!');
}
/*
* 遍历所有文件和目录
* */
foreach ($files as $item) {
if (!empty($item)) {
$obj = $map . '/' . $item; //目录或者文件
if (file_exists($obj)) {
/* 跳过空目录 */
if (is_dir($obj)) {
if (count(scandir($obj)) <= 2) {
continue;
}
}
$dir_list[$item] = $map . '/' . $item;
}
}
}
/*是否有文件*/
if (empty($dir_list)) {
exit('打包失败,无更新文件!');
}
$zippy = Zippy::load();
try {
/*压缩指定目录的文件*/
@$zippy->create($map . '/upgrade' . date('Y-m-d-H-i-s') . '.zip', $dir_list, true);
return true;
} catch (IOException $e) {
/*屏蔽报错信息*/
} catch (\Throwable $e) {
return false;
}
echo "压缩完毕!";
2. 运行脚本
git diff HEAD --name-only > diff.txt && php 脚本路径
在项目目录下,运行上面的命令,运行结束后 ,将会在项目目录生成一个打包好的压缩包
相关文章
-
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
- 互联网
- 2026年04月20日
-
如何使用PHP+WebHook自动同步Gitee、Github仓库内的代码到服务器?
如何使用PHP+WebHook自动同步Gitee、Github仓库内的代码到服务器?
- 互联网
- 2026年04月20日
-
如何使用frp搭建内网穿透、TCPUDP代理、httphttps代理、Socks5代理?
如何使用frp搭建内网穿透、TCPUDP代理、httphttps代理、Socks5代理?
- 互联网
- 2026年04月20日
-
如何学习会计(会计这么学,也太太太简单了)
如何学习会计(会计这么学,也太太太简单了)
- 互联网
- 2026年04月20日
-
如何医治一条慢SQL?
如何医治一条慢SQL?
- 互联网
- 2026年04月20日
-
如何用JS实现在网页上通过鼠标移动批量选择元素的效果?
如何用JS实现在网页上通过鼠标移动批量选择元素的效果?
- 互联网
- 2026年04月20日





