How to make part of an existing GIT repository a submodule
我有这个Git存储库,它包含两个文件夹:
我想把这些文件夹放到子模块中,并保留它们的更改历史记录。
我该怎么做?
今天有一个更好的方法:
看看这个答案。
一般的想法是使用"git filter branch"和以下步骤:
1)使用--EDOCX1的子目录过滤器(0)创建一个子模块(克隆您的repo之后)。
1 | $ git filter-branch --subdirectory-filter ABC HEAD -- --all |
有关此步骤的更多信息,请参阅此问题。
2)使用
1 | $ git filter-branch --index-filter"git rm -r -f --cached --ignore-unmatch ABC" --prune-empty HEAD |
号
3)将子模块提交到超级项目的最新版本。
请参见将子目录分离到单独的Git存储库中以获取一个实际示例。
每个子模块都将保留其历史。但正如本补丁方案中所述,它将:
lose all the historical connections between the superproject and the submodule, breaking tools like '
git bisect ', and making it difficult to recover old releases.Ideally, each version of the newly created superproject would be linked to the correct version of the submodule (and all the .gitmodules entries would be set up correctly, too, throughout the project's history)
号
如果不需要将以前的历史记录链接到新的子模块,可以按照上面提到的步骤操作。但是,如果在引用子模块(当前是简单的子目录)时确实需要从旧的点进行分支,那么您可以考虑尝试使用我引用的补丁中提到的脚本。正如Junio C Hamano所说,在本文中已经讨论过了,但还集成到了Git中:
Unfortunately, I do not think we have designed fully (nor implemented at all) behaviour to check out different points of history that has the same submodule moved around in the superproject tree.
号