Extract/move several Maven modules into a new Git repository
我有一个巨大的Git报告,大约有50个Maven模块(一个Maven反应堆建造)。如何将这些模块中的一些移动到新的git repo中?
我尝试了git subtree,但是这些命令总是将代码移动到新repo的根目录,而且我不能说"我想在新repo中使用a/、b/和c/d/"——相反,我必须移动每一棵树,然后,我必须重命名文件,然后从根目录移动到原来的位置(相对而言)。
如何导出/复制/移动按路径筛选的一组变更集,从一个git repo到另一个git repo,而不进行任何更改?有点:我该如何用git重复历史?
注意:我想移动数据。新回购协议不应该以任何方式被Git联系起来;Maven已经为我做了这件事。没有必要用subtree魔法来推动上游的变化或类似的事情。我希望世界看起来好像我们有两个休息开始。
- 你能补充一下你为什么要分开吗?回购协议太大了吗?您想单独对其进行版本/分支吗?这是出于保密原因吗?
- 我想把它们分成稳定和发展两部分(一部分非常稳定,很少变化,另一部分每天都变化)。这是为了加速开发:编译更少的代码,运行更少的测试。
- 为什么需要拆分repos来编译更少的代码?您不能只修改构建基础结构以允许部分构建/部署吗?例如,创建排除某些子项目的新Maven配置文件。如果项目最终是分支、版本化和发布在一起的,我建议不要将它们放在单独的回购中。
- @斯莱斯基:我们计划有三次回购,每年一次,每三个月一次,每三周一次。
创建多个回购的克隆-为最终想要拥有的每个新回购创建一个克隆。然后在每个新的repo中使用git filter-branch(或者一些在此基础上构建的工具,比如bfg repo cleaner),删除所有不想保留的内容。例如,在从git/github的历史记录中删除文件夹及其内容中对此进行了描述。
例如,如果要将一个repo拆分为两个新的repo,可以创建两个克隆(我们称之为a和b)。在A中,删除将进入B的所有内容,而B则相反。
然后,您将得到几个"新"回购("新"是指它们包含新的、重写的提交),每个都包含原始回购的一些子树。
作为重写过程的一部分,您可以决定是否要更改目录结构(例如,将main/subA移到subA,如果repo只包含subA,或者是否要在每个新repo中保留旧结构。
重要提示:在真实回购上尝试此操作之前,请创建一个克隆(在本地计算机和共享服务器上)并至少尝试一次。
如果需要多次执行此操作,则需要将两个回购合并为一个回购。为此,请参见Git合并不同的存储库?
- 这是一个有趣的想法,但只有一半。如何将这15个新回购协议合并为一个?
- @阿隆迪古拉:这是一个误会吗?不需要合并。如果您只想拆分为两个新的repo,您可以创建两个克隆,A和B。在A中,删除进入B的所有内容,在B中则相反。我编辑了我的答案(希望)澄清一些事情。
- 哦,对了。是的,我可以删除~B,只保留B。