You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单个Git仓库将develop、main分支分别部署至测试子域名与主域名?

单仓库部署多分支到不同域名的实现方案

完全可行,使用Git的git worktree功能就能实现单仓库下独立管理多分支的部署,既节省存储空间,又能保证不同分支的更新互不影响。

核心原理

git worktree允许一个Git仓库拥有多个独立的工作目录,每个目录对应不同的分支,所有工作目录共享同一个.git仓库目录,不会占用双倍项目空间,完美解决你提到的体积问题。

具体实现步骤

1. 配置多工作区

假设你的主仓库已克隆在~/project-main(对应main分支),现在为develop分支创建独立工作区:

# 进入主仓库目录
cd ~/project-main
# 为develop分支创建独立工作目录~/project-dev
git worktree add ../project-dev develop

执行后,~/project-dev就是develop分支的独立工作目录,和主仓库共享.git目录,仅占用项目文件的一份额外空间(而非整个仓库)。

2. 编写部署脚本

针对两个工作目录分别编写部署逻辑,避免分支切换带来的文件覆盖问题。示例脚本如下:

#!/bin/bash

# 部署main分支到主域名
deploy_production() {
    echo "开始部署main分支到主域名..."
    cd ~/project-main
    git pull origin main
    # 替换为你的实际部署操作,比如复制静态文件到web根目录
    cp -r ./dist /var/www/production/
    # 可选:重启web服务使更新生效
    systemctl reload nginx
}

# 部署develop分支到测试子域名
deploy_staging() {
    echo "开始部署develop分支到测试子域名..."
    cd ~/project-dev
    git pull origin develop
    cp -r ./dist /var/www/staging/
    systemctl reload nginx
}

# 根据参数选择部署目标
case "$1" in
    production)
        deploy_production
        ;;
    staging)
        deploy_staging
        ;;
    all)
        deploy_production
        deploy_staging
        ;;
    *)
        echo "使用方式: $0 {production|staging|all}"
        exit 1
esac

3. 日常维护命令

  • 查看所有工作区:git worktree list
  • 删除某个工作区:先删除对应目录(如rm -rf ~/project-dev),再执行git worktree prune清理仓库记录

为什么之前切换分支会互相影响?

你之前在同一个工作目录切换分支,Git会替换当前目录下的文件以匹配目标分支,导致两个版本的内容互相覆盖。而git worktree通过独立工作目录实现分支隔离,每个目录的文件操作完全独立,更新其中一个分支不会影响另一个。

内容的提问来源于stack exchange,提问作者RDMaven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:00:42