如何创建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
相关产品推荐
相关产品推荐

