我喜欢从存储库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合并?
答案 0 :(得分:1)
-b
的{{1}}选项指定要创建的新分支,其中包含新历史记录,而不是用于创建历史记录的分支。您创建了两个新分支git subtree split
和branch_1
,它们都包含您当前所在分支的新历史记录。
然后我在存储库2中的b *创建了分支2
这没有任何效果。 branch_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