如何在维护历史记录的同时将单个目录从git存储库移动到新的存储库?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我继承了一个git存储库,它包含多个项目,位于不同的目录中。我想将存储库划分为新的单独的存储库,每个项目一个,然后让主存储库将项目作为子模块包含。如果可能的话,我想在保持单个项目的修订历史的同时,做所有这些。

我可以克隆每个项目的存储库,每次删除所有其他项目,但是有更好的方法来避免在每个新的项目存储库中复制历史吗?

提问于
用户回答回答于

你可以用git filter-branch重写项目的历史记录。从文件中:

若要重写存储库,使其看起来像是foodir/已成为其项目根,并丢弃所有其他历史记录,请执行以下操作: git过滤器-分支-子目录-过滤器foodir--全部

制作几份你的回购文件,为你想要分离的每个子目录做这件事,你应该得到你想要的东西。

用户回答回答于

GIT的要点是,历史通过散列父提交来体现在每个提交中。可以将提交“重放”到一个新的存储库中,并且只保留每个子项目(这基本上是SVN导入器的工作方式)。然而,这将破坏提交散列的意义。如果你对此没有异议,那就随你去吧。

在过去,我只是复制了它,然后继续前进。这使得事情变得更大,但磁盘空间却很便宜;我的时间很昂贵。

我也不知道有什么工具可以拼接出一个目录。我想你可以在目录上进行git-登录以查找所有提交,然后用类似git-快速导出的内容重放提交吗?

扫码关注云+社区