借助Github Actions合并两个代码仓库以实现部署
双仓库隔离代码+自动合并+Lambda部署实现方案
1. 仓库结构规划
- 主体仓库(开放给所有项目开发者):存放全部公共代码,为待隔离代码保留完全匹配的空目录/占位文件(比如
src/restricted/下留空文件或注释说明),确保整体文件结构和隔离仓库完全一致。 - 隔离仓库(仅授权特定开发者访问):存放需要限制权限的敏感代码,文件结构与主体仓库严格对齐,比如
src/restricted/下放置真实业务代码。
2. 自动合并的两种实现方式
方式1:Git子模块(Submodule)
- 在主体仓库中添加隔离仓库作为子模块,绑定到对应目录:
git submodule add git@github.com:你的组织/restricted-repo.git src/restricted - 主体仓库推送时,仅保留隔离仓库的提交引用,无权限开发者无法查看隔离代码内容。在Github Actions部署Lambda前,拉取子模块最新代码:
# Lambda部署流程中新增步骤 - name: 拉取隔离代码子模块 run: git submodule update --init --recursive --remote
方式2:Github Actions自动同步
- 隔离仓库推送代码时,触发Actions将指定目录同步到主体仓库对应位置:
- 在隔离仓库的
.github/workflows/sync-to-main.yml中配置:name: 同步隔离代码到主体仓库 on: [push] jobs: sync: runs-on: ubuntu-latest steps: - name: 拉取主体仓库 uses: actions/checkout@v4 with: repository: 你的组织/main-repo token: ${{ secrets.MAIN_REPO_PAT }} # 拥有主体仓库推送权限的PAT path: main-repo - name: 拉取隔离仓库 uses: actions/checkout@v4 path: restricted-repo - name: 同步代码文件 run: | cp -r restricted-repo/src/restricted/* main-repo/src/restricted/ cd main-repo git config user.name "GitHub Actions" git config user.email "actions@github.com" git add src/restricted/ git commit -m "同步隔离仓库最新代码" git push - 给主体仓库设置分支保护规则,禁止普通开发者直接修改隔离代码目录,避免同步冲突。
- 在隔离仓库的
3. 适配AWS Lambda部署
- 无论采用哪种方式,在Github Actions的Lambda打包步骤前,确保已获取完整的主体代码+隔离代码:
- 子模块方案:拉取子模块后直接打包整个项目目录;
- 同步方案:主体仓库已包含最新隔离代码,直接执行原有打包流程即可。
- 原有Lambda部署逻辑无需大幅修改,仅需新增拉取/同步隔离代码的前置步骤。
关键注意事项
- 权限管控:隔离仓库设为私有,仅授权必要人员访问;主体仓库根据需求设为内部或公开。
- 冲突处理:通过分支保护规则限制普通开发者修改隔离代码目录,若出现冲突需手动介入解决。
- 版本兼容:确保隔离代码与主体仓库代码的版本依赖一致,避免部署后出现功能异常。
内容的提问来源于stack exchange,提问作者Eric K.
相关产品推荐
相关产品推荐

