我有两个Git仓库,A和B. Repo B正在退役。一些但不是全部的文件需要合并到A的一个分支中,包括他们的提交历史记录,一次可能只有一个文件夹。如果相关的话,那个分支最终将被用于针对A的主分支的github PR。如何将git仓库的一部分迁移到另一个仓库?
- 我该如何做到这一点?
- 如果在合并后但B退休前对B进行了更改,那么如何更新A?
我有两个Git仓库,A和B. Repo B正在退役。一些但不是全部的文件需要合并到A的一个分支中,包括他们的提交历史记录,一次可能只有一个文件夹。如果相关的话,那个分支最终将被用于针对A的主分支的github PR。如何将git仓库的一部分迁移到另一个仓库?
有两种情况,我知道你的情况是第二种情况,但我会在这里留下,所以它可能对其他人有用。
案例1
情况1是当甲和乙共享相同的起源(历史记录),因此一个可从其它拉,反之亦然。
对于问题1:
第一上拉回购乙成甲。
然后,合并乙到一个的分公司没有提交:
git checkout A_branch
git merge B_branch --no-commit --no-ff
你不从乙想将出现新的或新的变化一个的文件分支。删除/丢弃它们。
然后只是提交。这样你最终只需要从B得到想要的东西。
问题2:
再次做同样的事情。
案例2
案例2时一个和乙是完全不同的,他们的文件夹结构也不同,也就是说,没有办法,如果你简单地复制一个文件会发生冲突回购文件夹到另一个(尽管这不是我们要做的)。
如果是这种情况,您可以使用git subtree
。 This blog post可以提供更多的细节,但基本上你想要做的是,在回购一个:
git subtree add --prefix ./destination_folder https://your_repo.com/B.git master
所以prefix
指定回购乙目标文件夹,然后乙的地址其次是它的分支。
如果您需要安装git subtree
,请参阅该博客文章。
另一种解决这个问题的方法是使用,它结合了两种回购创造了第三个,但我觉得你的情况适合用git subtree
更好,所以我就离开了 URL here。
为什么你需要知识库的一部分的历史?仅仅复制所有需要的文件不是更好吗? – Jepessen