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

如何创建sub子分支并与main分支的folder_2保持同步?

实现main分支folder_2与sub分支的同步方案

一、手动同步方案

1. 创建初始sub分支

如果还没有sub分支,先创建一个空分支并同步folder_2内容:

# 创建无历史的空分支
git checkout --orphan sub
# 删除分支下所有文件
git rm -rf .
# 拉取main分支的folder_2目录
git checkout main -- folder_2/
# 将folder_2下的内容移到分支根目录
mv folder_2/* .
rm -rf folder_2/
# 提交初始内容
git add .
git commit -m "Initial sync from main/folder_2"

2. 后续手动同步更新

当main分支的folder_2有修改后,切换到sub分支执行以下命令完成同步:

git checkout sub
# 拉取main分支最新的folder_2内容
git checkout main -- folder_2/
# 替换当前分支根目录内容
rm -rf *
mv folder_2/* .
rm -rf folder_2/
# 提交同步变更
git add .
git commit -m "Sync with main/folder_2 latest changes"
# 推送到远程仓库(如果需要)
git push origin sub

也可以用git subtree简化操作:
创建分支时直接拆分folder_2:

git subtree split --prefix=folder_2 -b sub

后续同步只需执行:

git checkout sub
git subtree pull --prefix=. origin main --squash

二、自动同步方案

1. 本地Git钩子自动同步

在仓库的.git/hooks目录下创建post-commit脚本(执行chmod +x .git/hooks/post-commit赋予权限),内容如下:

#!/bin/bash
# 仅在main分支提交后触发同步
if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then
    git checkout sub
    # 同步folder_2内容
    git checkout main -- folder_2/
    rm -rf *
    mv folder_2/* .
    rm -rf folder_2/
    git add .
    # 有变更才提交
    if ! git diff --cached --quiet; then
        git commit -m "Auto-sync main/folder_2 changes"
    fi
    # 切回main分支
    git checkout main
fi

注:该钩子仅在本地提交时生效,团队协作场景建议用CI方案。

2. CI/CD远程自动同步

以GitHub Actions为例,在仓库根目录创建.github/workflows/sync-sub-branch.yml:

name: Sync sub branch with main/folder_2
on:
  push:
    branches: [ main ]
    paths: [ 'folder_2/**' ] # 仅当folder_2目录变更时触发

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 需要完整仓库历史

      - name: Sync folder_2 to sub branch
        run: |
          git config user.name "GitHub Actions"
          git config user.email "actions@github.com"
          git checkout sub
          git checkout main -- folder_2/
          rm -rf *
          mv folder_2/* .
          rm -rf folder_2/
          git add .
          if git diff --cached --quiet; then
            echo "No changes to sync"
            exit 0
          fi
          git commit -m "Auto-sync main/folder_2 changes"
          git push origin sub

每次main分支的folder_2目录有推送时,会自动同步更新sub分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:05:21