我怎样才能将一个目录从一个Git仓库移动到一个新的仓库,同时保持历史?

我已经inheritance了包含多个项目在不同的目录中的git存储库。 我想将资源库分成新的单独的资料库,每个项目一个,然后让主资源库包含项目作为子模块。 如果可能的话,我想尽可能保持个别项目的修订历史。

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

您可以使用git filter-branch来重写项目的历史logging。 从文档:

重写仓库看起来好像foodir /是它的项目根源,并放弃所有其他历史:

 git filter-branch --subdirectory-filter foodir -- --all 

制作你的数据库的几个副本,为你想要分裂的每个子目录做这个,你应该结束你正在寻找的东西。

git的意义在于,每次提交时都会通过散列父提交来体现历史logging。 你可以“重放”提交(这实质上是svn-importer的工作原理)到一个新的版本库中,只保留每个子项目。 但是,这会破坏提交哈希的含义。 如果你没有问题,那就这样吧。

在过去,我只是克隆它,继续前进。 这使事情变大,但磁盘空间便宜; 我的时间很贵。

我也不知道有什么工具可以拼出一个目录。 我想你可以gitlogin目录find所有提交,然后重播提交像git-fast-export?

要将文件夹导出为新的存储库,您需要:

  1. 克隆要导出文件夹的存储库。
  2. 要在您的托pipe服务提供商上创build一个空的存储库作为GitHub,以存储导出的文件夹。
  3. 打开克隆的存储库文件夹并运行以下命令:

     git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master