如何从BitBucket配置无工作树的Git部署到测试与生产环境
核心问题解答
1. Staging/Production是否要使用bare仓库的结论
绝对不要使用bare仓库。
bare仓库仅存储Git版本历史数据,没有实际的项目代码工作区,完全不具备运行Laravel项目的条件。你提到的「不需要在服务器上开发所以不需要working tree」是认知偏差:这里的working tree就是服务器上实际运行的项目代码文件,是服务运行的必要基础,你不需要的只是「在服务器的工作区做代码提交、修改」这类开发操作,而非工作区本身。
2. 两台服务器推荐的Git部署方案
使用普通的非bare克隆即可,也就是你当前Staging正在用的方案,完全适配你要求的简单流程:
- 首次部署时,在Staging服务器克隆仓库后切到
develop分支,Production服务器克隆仓库后切到master分支 - 每次更新代码时,先拉取远程最新提交,再用重置命令覆盖服务器本地所有无关改动:
- Staging执行命令:
git fetch --all git reset --hard origin/develop - Production执行命令:
git fetch --all git reset --hard origin/master
- Staging执行命令:
- 代码重置完成后,按需执行Laravel部署的后续操作即可,比如
composer install、php artisan migrate、缓存清理等。
小提示:Laravel项目通常会把
.env、storage运行时文件、vendor目录排除在Git版本控制外,上述git reset --hard命令不会修改这些未被Git跟踪的文件,不会影响服务器上的配置、运行日志、已安装的依赖包等内容,符合部署需求。
3. 当前Production的异常变更问题处理
直接执行上述Production对应的重置命令即可,该命令会清空所有镜像带来的多余修改、冗余文件,让服务器代码完全对齐BitBucket上master分支的最新代码,和你之前在Staging上解决问题的逻辑完全一致。
内容的提问来源于stack exchange,提问作者DavidN
相关产品推荐
相关产品推荐

