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

Fork、Submodule与Subtree对比:如何创建关联的项目副本?

私人仓库副本同步解决方案

方案一:远程镜像+手动双向同步

这个方案能保持和原仓库完全一致的文件层级,冲突处理灵活,适配你的需求:

  1. 初始化repo_B仓库
    在GitHub上创建空的私人仓库repo_B(不要勾选初始化README、.gitignore等选项)。

  2. 将repo_A内容推送到repo_B
    本地克隆repo_A,添加repo_B作为远程仓库并推送:

git clone git@github.com:your-username/repo_A.git
cd repo_A
git remote add repo_B git@github.com:your-username/repo_B.git
git push repo_B main  # 替换main为原仓库的主分支名称(如master)
  1. 在repo_B中修改内容
    克隆repo_B到本地,正常进行代码修改、提交、推送:
git clone git@github.com:your-username/repo_B.git
cd repo_B
# 修改文件后
git add .
git commit -m "modify some files"
git push origin main
  1. 同步repo_A的最新变更到repo_B
    在repo_B的本地目录中,添加repo_A作为上游远程,拉取并合并:
# 首次设置上游
git remote add upstream git@github.com:your-username/repo_A.git

# 后续每次同步
git pull upstream main
# 若出现冲突,手动选择保留版本后提交
git commit -m "merge upstream updates from repo_A"
git push origin main
  1. 同步repo_B的修改到repo_A(可选)
    如果需要把repo_B的修改推回原仓库,在repo_A的本地目录拉取repo_B的分支合并即可:
git pull repo_B main
# 处理冲突后提交推送
git push origin main

方案二:Git Subtree 合并(保持根目录层级)

Subtree可以把原仓库的内容合并到repo_B的根目录,无需子目录嵌套,操作更一体化:

  1. 初始化并配置repo_B
    创建空的repo_B并克隆到本地,添加repo_A作为上游远程:
git clone git@github.com:your-username/repo_B.git
cd repo_B
git remote add upstream git@github.com:your-username/repo_A.git
  1. 合并repo_A内容到repo_B根目录
git subtree add --prefix=./ upstream main
# prefix设为./表示将原仓库内容合并到当前根目录
  1. 同步repo_A的更新
    每次需要拉取repo_A的新变更时:
git subtree pull --prefix=./ upstream main
# 处理冲突后提交推送
git push origin main
  1. 推送repo_B的修改到远程
    日常修改后的提交推送和普通仓库一致:
git add .
git commit -m "update files in repo_B"
git push origin main

方案对比

  • 远程镜像方案:逻辑直观,操作门槛低,适合熟悉基础Git操作的用户,完全掌控冲突处理流程。
  • Subtree方案:无需维护多个本地仓库,所有操作在repo_B中完成,适合追求一体化管理的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:20:24