我喜欢从存储库 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合并?
-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
好吧,如果您不想保留原始分支,这可能会起作用,对吧? 但是,对我来说,我想将现有存储库的所有分支作为子树放到新的存储库中。
怎么可以这样呢?
最诚挚的问候, 托马斯