首先,很抱歉提出这个问题。已经有很多关于它的主题了。但是我并没有太多的帮助。因为我对Git不熟悉。
我正在将一个文件夹从一个Git仓库移动到另一个(已经存在的)Git仓库。例如:
repo-1
---- dir1
---- dir2
---- dir3
---- dir-to-move
---- dir5
repo-2
---- dir1
---- dir2
---- dir3
最终我希望仓库看起来像这样
repo-1
---- dir1
---- dir2
---- dir3
---- dir-to-move
---- dir5
repo-2
---- dir1
---- dir2
---- dir3
---- dir-to-move
即将在两个版本库中同时存在dir-to-move。但最终我将把最新更改迁移到repo-2并从repo-1中删除dir-to-move。
我的初步研究让我相信我需要使用filter-branch。例如:
如何使用“git format-patch”和“git am”移动文件以保留历史记录从而将文件从一个git repo移动到另一个git repo
我后来了解到subtree已经取代了那种方法。然而它并没有做我期望的事情。我认为我应该能够做这样的事情:
在repo-1工作区中
git subtree split -P dir-to-move -b split
将split分支筛选为只包含dir-to-move及其历史记录。 然后在repo-2的工作区中。
git remote add repo-1 repo-1-url.git
git subtree add --prefix dir-to-move split
这确实将代码移动了。同时,它也有点包含了历史记录。例如。
cd repo-2
git log
显示来自 repo-1 的提交记录
但是
cd repo-2
git log dir-to-move
仅显示“从提交中添加目录移动”的内容……
即,历史记录已包含,但在检查特定文件/目录时不会显示出来。
我该如何正确地做到这一点?