同一测试服务器下同一项目bare与non-bare仓库同步配置方案咨询
现有方案实现步骤
你提到的新增non-bare仓库的方案是可落地的,具体操作如下:
- 克隆bare仓库为non-bare仓库
在测试服务器执行命令:git clone /home/serveruser/project.git /home/serveruser/project-test
路径可根据实际需求调整,确保测试人员对该目录有读取和执行权限即可。 - 配置自动同步逻辑
修改bare仓库的post-receive钩子(你原有写入/var/www/html/project的逻辑可以保留,不需要删除),新增以下内容:
# 切换到non-bare仓库目录,切换失败直接退出 cd /home/serveruser/project-test || exit 1 # 清除钩子默认带入的GIT_DIR环境变量,避免操作路径错误 unset GIT_DIR # 拉取bare仓库所有最新分支的更新,不改变当前工作区的checkout状态 git fetch --all
配置完成后,只要有开发人员向bare仓库推送代码,non-bare仓库就会自动同步所有分支的最新代码,测试人员可以直接进入该目录执行git checkout 分支名切换到任意需要测试的分支。
3. 权限配置
不要给测试人员分配non-bare仓库目录的写入权限,避免测试人员在目录内直接修改代码或提交,导致后续同步失败,所有代码变更统一走开发向bare仓库推送的流程即可。
更优实现思路
上述方案已经可以满足需求,如果你想要更高效的测试流程,可以参考以下优化方向:
- 多分支并行自动部署:不需要测试人员手动切换分支,在
post-receive钩子中新增逻辑,识别所有推送的分支,自动将每个分支的代码拉取到独立的测试目录,比如/var/www/test/[分支名],可以配合Nginx配置分支名对应的二级测试域名,测试人员直接访问对应地址即可测试,不需要登录服务器操作。 - 接入轻量CI流程:如果团队规模稍大,不想手动维护钩子逻辑,可以在测试服务器部署轻量Git服务+CI runner,所有分支推送后自动触发部署流水线,除了部署代码外还可以自动执行单元测试、语法检查等前置校验步骤,测试人员可以直接看到每次推送的校验结果和测试地址,流程更规范。
- 保留原有生产发布逻辑:你原本从bare仓库推送master到生产服务器的流程不需要调整,两套逻辑互不影响。
内容的提问来源于stack exchange,提问作者user2399035
相关产品推荐
相关产品推荐

