如何将部分git repo迁移到另一个仓库?

时间:2015-12-02 22:37:14

标签: git

我有两个Git回购,A和B.回购B正在退休。其中一些(但不是全部)文件需要合并到A的分支中,包括它们的提交历史记录,一次可能是一个文件夹。该分支最终将用于针对A的主分支的github PR,如果它是相关的。

  1. 我如何做到这一点?
  2. 如果在合并后但在B退休之前对B进行了更改,那么如何使用这些更改更新A?

1 个答案:

答案 0 :(得分:0)

有两种情况,我知道你的情况是第二种,但我会留在这里,所以它可能对其他人有用。

案例1

案例1是当 A B 共享相同的来源(历史)时,因此可以从另一个中提取,反之亦然。

问题1:

首先将回购 B 拉入 A

然后,将 B 合并到 A 的分支中,而不提交:

git checkout A_branch
git merge B_branch --no-commit --no-ff

B 中不需要的文件将显示为 A 分支的新更改或新更改。删除/丢弃它们。

然后提交。这样你最终只需要你想要的东西 B

问题2:

再做同样的事情。

案例2

案例2是当 A B 完全不同时,它们在文件夹结构上也有所不同,也就是说,如果你只是简单地复制文件就不会碰撞一个repo文件夹到另一个(虽然这不是我们要做的)。

如果是这种情况,您可以使用git subtreeThis blog post可以提供更多详细信息,但基本上您要做的是,在repo A

git subtree add --prefix ./destination_folder https://your_repo.com/B.git master

所以prefix指定repo B 的目标文件夹,然后是 B 的地址,后跟其分支。

如果您需要安装git subtree,请参阅该博文。

此问题的另一个解决方案是使用git-stitch-repo,它结合了两个repos创建第三个,但我认为你的情况更适合git subtree,所以我只留下{{1网址here