我有一个巨大的Git仓库,有大约50个Maven模块(一个Maven反应堆构建)。如何将其中一些模块移动到新的Git仓库?
我尝试git subtree
,但这些命令总是将代码移动到新回购的根目录,而且我不能说"我想要a/
,b/
和c/d/
在我的新回购中" - 相反,我必须移动每个单独的树,然后,我必须重命名文件,然后从根移动到他们的旧地方(相对而言)。
如何在不对其进行任何更改的情况下,将路径筛选的一组更改集从一个Git仓库导出/复制/移动到另一个Git仓库?种类:我如何使用Git 重复历史记录?
注意:我想移动数据。新的回购不应该由Git以任何方式联系起来; Maven已经为我做了这件事。没有subtree
魔法来推动上游或类似的变化。我希望世界看起来好像我们有两个回购开始。
答案 0 :(得分:5)
创建回购的几个克隆 - 最后一个用于您想要拥有的每个新回购。然后在每个新回购中使用git filter-branch
(或基于它的某些工具,如BFG Repo-Cleaner)来删除您不想保留的所有内容。例如在Remove folder and its contents from git/GitHub's history中描述了这一点。
例如,如果你想将一个repo分成两个新的repo,你可以创建两个克隆(让他们称之为A和B)。在A中,您将删除将进入B的所有内容,反之则删除B.
之后,你会得到几个" new" repos(" new"在它们包含新的重写提交的意义上),每个提交包含原始repo的一些子树。
作为重写过程的一部分,您可以决定是否要更改目录结构(例如,如果repo仅包含main/subA
,则将subA
移至subA
,或者如果你想在每个新的仓库中保留旧结构。
重要:在您的真实存储库上尝试此操作之前,请创建克隆(在本地计算机和共享服务器上)并至少尝试一次。
如果您需要多次执行此操作,则需要将两个repos合并为一个。为此,请参阅git merge different repositories?