假设你有一个存储库:
myCode/megaProject/moduleA
myCode/megaProject/moduleB
随着时间的推移(几个月),您重新组织了项目。重构代码,使模块独立。MegaProject目录中的文件被移动到它们自己的目录中。强调“移动”-这些文件的历史记录得到保留。myCode/megaProject
myCode/moduleA
myCode/moduleB
现在您希望将这些模块移至它们自己的GIT存储库,仅留下包含megaProject的原始存储库。
myCode/megaProject
newRepoA/moduleA
newRepoB/moduleB
filter-branch
命令可以实现此功能,但是它不能跟踪文件移动到目标目录之外的历史记录。 因此,历史记录始于文件移动到新目录时,而不是文件在旧 megaProject 目录中存在时的历史记录。如何基于目标目录拆分 GIT 历史记录,并跟踪该路径之外的历史记录 - 仅留下与这些文件相关的提交历史,而没有其他内容?
许多其他 SO 答案侧重于通常拆分存储库的情况,但没有提到拆分和跟踪移动历史记录。
git filter-repo --analyze
不应该能够提供有关重命名的信息吗? - Leogit-filter-repo
,有--help
,并且有一堆安全保护。我不确定在这种情况下将其作为自己的答案最合适的方式是什么。(它是一个Gist,但在我看来也太长了,不能在此处进行代码块处理。) - ssokolow