我有一个大型多模块项目,我试图分成多个GIT回购。我使用了this link建议的以下命令序列。
# Preparing the Split Temp Branch
cd modules\bigproject
git subtree split -P "bigproject.core" -b "subtree-bigproject-core" #rejoin wasn't used
# Pushing into a Bare Repo for the split subtree
git branch --track subtree-bigproject-core origin/subtree-bigproject-core
git push --all origin
mkdir ..\subtree-bigproject-core
cd ..\subtree-bigproject-core
git init --bare
cd ..\bigproject
git push ..\subtree-bigproject-core subtree-bigproject-core:master
# Pushing the subtree repo to remote
cd ..\subtree-bigproject-core
git remote add origin git@ssh-git-xxx.domain.com:grp/module-bigproject-core.git
git push --all origin
# Back into the main repo, including the subtree using `subtree add`
cd ..\bigproject
git rm -r "bigproject.core"
git add -A && git commit -am "replacing bigproject.core with subtree"
git subtree add -P "bigproject.core" --squash \
-m "adding bigproject.core repo as subtree" \
git@ssh-git-xxx.domain.com:grp/module-bigproject-core.git master
# Adding subtree remote repo to allow subtree push/pull/merge
git remote add subtree-bigproject-core \
git@ssh-git-xxx.domain.com:grp/module-bigproject-core.git
请注意我不使用" - 重新加入"在拆分命令执行期间
现在我可以独立更改主项目和核心子树。
但是,当我尝试从容器" bigproject"中为子树推送更改时,通过执行以下git subtree push
命令,它再次开始读取主容器的整个提交历史记录,没有认识到子树实际上是从该容器的历史中创建的,然后在使用&#34时添加回来;添加"。
git subtree push -P "bigproject.core" subtree-bigproject-core/master
Roger表示"拉" /"合并"添加子树后是必要的,但这也不起作用。 git subtree
文档似乎表明即使在执行git subtree split --rejoin
后也需要add
,但是当我再次为该前缀执行subtree split --rejoin
时,它会开始阅读整个提交历史记录再次。在我的回购历史中有超过10K的提交,分割是非常耗时的,我想利用子树命令从分裂点向前移动的能力。
我错过了什么?添加" bigproject.core"子树回到容器回购中,我需要能力:
更新:子树文档让我感到困惑。这个例子没有涵盖我的确切情况,我无法使其适用于上述情况。