如何使用 git subtree 将子文件夹的多个分支迁移到另一个存储库

问题描述 投票:0回答:2

我喜欢从存储库 1 迁移具有完整历史记录的子文件夹:

a -> b -> c (branch 1)
      \-> d (branch 2)

到存储库 2 中的同一目标文件夹:

          old -> merged_subfolder (master)
              /
a* -> b* -> c* (branch 1)
        \-> d* (branch 2)

* 表示子文件夹的限制。

目前为止我用过

git subtree split -P subfolder -b branch_1
git subtree split -P subfolder -b branch_2
git subtree add -P target_folder repo_1 branch_1

然后我在存储库 2 中的 b* 处创建了分支 2,但是

git subtree add -P ./ repo_1 branch_2

不起作用,因为

prefix './' already exists.

有什么解决问题的建议吗?

然后,如何将分支2与存储库2中的master合并?

git git-subtree
2个回答
1
投票

-b
git subtree split
选项指定要创建的包含新历史记录的新分支,而不是从中创建历史记录的分支。 您创建了两个新分支
branch_1
branch_2
,它们都包含您当前所在分支的新历史记录。

然后我在存储库 2 中的 b* 处创建了分支 2

这没有任何效果。

git subtree add
从存储库中获取提交及其历史记录并将其合并到当前分支中;它根本不考虑其他分支名称。

前缀“./”已经存在。

您无法为现有目录添加子树。 添加子树而不合并它只是普通的获取;显然,您仍然可以添加(并合并)子树,然后恢复合并。

总之,要进行完整迁移:

# in repository 1
git subtree split -P subfolder -b branch_1_new branch_1
git subtree split -P subfolder -b branch_2_new branch_2

# in repository 2
git subtree add -P target_folder repo_1 branch_2_new
git branch branch_2 HEAD^2
git reset --hard HEAD^
git subtree add -P target_folder repo_1 branch_1_new
git branch branch_1 HEAD^2

如果您稍后决定将第二个分支合并到主项目中,请执行

git subtree merge -P target_folder branch_2

0
投票

好吧,如果您不想保留原始分支,这可能会起作用,对吧? 但是,对我来说,我想将现有存储库的所有分支作为子树放到新的存储库中。

怎么可以这样呢?

最诚挚的问候, 托马斯

© www.soinside.com 2019 - 2024. All rights reserved.