使用git子树将项目拆分为多个repos

时间:2015-07-21 07:57:14

标签: git split git-subtree

我有一个大型多模块项目,我试图分成多个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"子树回到容器回购中,我需要能力:

  1. 将更改从容器推送到子树仓库。
  2. 将更改从远程子树repo拉入容器。我可以将这些更改压缩,只要更改识别出子树已在前一个"子树添加"中被压扁。或"子树拉"这个子树。
  3. 更新:子树文档让我感到困惑。这个例子没有涵盖我的确切情况,我无法使其适用于上述情况。

    1. 它表示如果使用了add,则不需要--onto,如果使用了add,则子树的智能合并将在此之后成功发生。但就我而言,"添加"似乎并没有认识到子树是从最初的大型回购中创建的。
    2. 它表示使用了--squash,不建议使用--rejoin。这是否意味着如果" - 壁球"在"添加"期间使用,将无法利用智能历史重建来进行子树的后续拉/推/合并?

0 个答案:

没有答案