我需要使用git重新组织一个项目。该项目目前有3个独立的(中央)存储库,我需要在它们之间来回移动大量文件。在这样做的同时,每个存储库都在进行开发,重组需要一些时间。我一直在各个存储库中不断地重构我的重构分支。
是否有一种既定的方式来执行这种复杂的跨存储库重构,以保存存储库中的历史记录并利用git在存储库中重命名合并逻辑,通过将所有存储库移动到第三个存储库,执行合并然后回去?
实际上,我有三个存储库,A,B和C.我想将文件从B移动到A和C并保留历史记录。这不是一个目录的简单移动,而是将大量单个文件移动到新位置,重命名,更新等。我一直在A,B和C上工作,移动和更新文件,但这显然不会保留在存储库中移动的文件的历史记录。我想可以创建一个新的存储库D,将A,B和C导入到子目录中,使用rebase将A,B和C上的各个提交合并到D上的一个新的大提交中,这将使git理解这些文件已被移动,不只是在一个地方删除而是从另一个地方删除,然后将更改应用回每个单独的存储库?
答案 0 :(得分:1)
您可以使用repo B,克隆它,进行所有想要更改文件的修改(移动位置,重命名,更新等)以准备存储库A的文件。您还可以使用filter-branch
重写历史删除不需要的路径/文件。准备就绪后,您可以从存储库A中将其作为分支获取。然后,您只需将分支合并到主分支中。是的,git可以合并来自不同存储库的分支,它使历史看起来很有趣 - 两个根(初始提交)在某些时候合并。
然后用repo C做同样的事。