我已成功地使用像这两个示例中概述的方法之类的命令将子模块转换为子目录:
挑战在于在一个目录上成功实现此操作,通过每次转换保留其历史记录。
以上概述的这两种方法已经在一个简单的实验性存储库上运行得很好,但无法处理更复杂的存储库。例如,具有任意提交模式的存储库。
当尝试将以前是子模块的目录转换为子模块时,执行以下操作会出现问题:
git filter-branch --subdirectory-filter <lib-directory> -- --all
如果我理解正确。这会引发:
Rewrite c95281d27e4602e9af50146eefcf7c28f5bb4f35
(2/11)a989b207d3757f9803fd50fa2d77908a4dc1330e
fatal: failed to unpack tree object
c95281d27e4602e9af50146eefcf7c28f5bb4f35:lib/test_submodule
Could not initialize the index`
由于在INDEX中反复引用子模块,因此出现了绝对没有类似结果的情况。当子模块被转换时,会出现上述错误。
是否有一种执行filter-branch
的方法,可以避免对子模块的这些早期引用?
编辑:我回来再次查看这个问题,我仍然没有找到解决方法。使用Subdir->Submodule方法和git filter-branch
与普通目录一起使用很好;但是,当它碰到子模块时就会崩溃。发生崩溃的位置:
https://github.com/github/git-msysgit/blob/master/git-filter-branch.sh#L300
我无法理解其中的意义。