我们有一个大项目,它开发了一个结构,其中包含许多具有层次依赖结构的库。
现在,转到另一个项目,我想将其分解为每个库的一个仓库和一个或多个项目特定的仓库,但保留历史记录。实际上,这意味着将一个大型仓库的子目录转换为可能通过子模块或其他适当机制处理的依赖关系的单独仓库。这种重组操作是否可以在没有太多痛苦的情况下使用git?
答案 0 :(得分:2)
这取决于。如果您希望将新存储库作为子模块进行跟踪并重写历史记录,使其看起来像您一直在使用子模块,则需要编写git filter-branch
脚本来为所述子目录执行此操作。棘手的部分是反映子模块中的分支和合并。
如果您只想从现在开始执行此操作,则可以轻松地将特定路径中的提交移动到新存储库。只需在新分支上执行过滤器分支,并仅包含涉及对其进行更改的历史记录。创建一个新的存储库并仅获取该分支。您现在可以将此存储库添加为子模块,并从此处跟踪后续更改。