如何在每次push时自动将仓库部分内容拆分推送至其他独立仓库
前置配置
首先处理themes目录不推入main仓库的需求:
- 在
main仓库根目录创建.gitignore文件,添加一行/themes/,即可让git默认忽略整个themes目录下的所有内容,不会被提交到main仓库的远程分支。
优先推荐:CI/CD 流水线自动化方案
该方案支持所有团队成员推送代码到main仓库时自动触发拆分流程,无需人工操作,适配所有主流代码托管平台(GitHub/GitLab/Gitee等),以下以GitHub Actions为例说明配置逻辑:
- 为
main仓库配置有权限推送主题独立仓库的访问令牌:在main仓库的设置页找到密钥配置区,新增名为THEME_REPO_TOKEN的密钥,值为你账号的个人访问令牌,确保令牌拥有仓库读写权限。 - 在
main仓库根目录新建.github/workflows/split-themes.yml工作流配置文件,内容参考如下:
name: Split themes to independent repos on: push: branches: [ main ] jobs: split: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Split theme-1 to main-theme-1 uses: splitsh-lite/github-action@v1 with: prefix: themes/theme-1 target: https://${{ secrets.THEME_REPO_TOKEN }}@github.com/你的账号名/main-theme-1.git target-branch: main - name: Split theme-2 to main-theme-2 uses: splitsh-lite/github-action@v1 with: prefix: themes/theme-2 target: https://${{ secrets.THEME_REPO_TOKEN }}@github.com/你的账号名/main-theme-2.git target-branch: main
以上配置会在每次代码推送到main分支时自动执行,将对应主题目录的内容完整推送到独立仓库,还可保留所有提交历史。如果不需要保留提交历史,可以把拆分步骤替换为目录复制、新建提交推送的简单脚本,执行效率更高。
其他代码托管平台的配置逻辑完全一致,只需要将工作流语法替换为对应平台的格式即可。
备选:本地Git钩子方案
如果你不想依赖云端CI服务,也可以配置本地pre-push钩子实现自动拆分:
- 进入
main仓库的.git/hooks目录,新建pre-push文件并赋予可执行权限,内容参考:
#!/bin/bash for theme_path in themes/*/; do theme_name=$(basename "$theme_path") target_repo="git@github.com:你的账号名/main-${theme_name}.git" git subtree push --prefix="$theme_path" "$target_repo" main done exit 0
该方案会在你本地执行git push操作前自动触发拆分推送,仅对配置了钩子的本地设备生效,适合单人开发场景使用。
内容的提问来源于stack exchange,提问作者Mojtaba Barari
相关产品推荐
相关产品推荐

