我已经看过很多关于使用子模块的教程,但它们似乎都有两个常见的用例之一。
A)我在子目录中有一些代码,我想开始单独跟踪它,所以我使用filter-branch将其转换为子模块
B)我想将git repo拉入我项目的子目录中并单独跟踪
但是,让我们说你不知道git子模块,并将一个repo的副本放入你自己的repo的子目录中,并且必须进行一些修改,但最终意识到它应该是一个子模块。有没有办法追溯获取该子目录并将其转换为与从中复制的repo重新集成的子模块?
通过示例可能会更好。让我们说你的本地项目是Xyz。您下拉(虚构)项目https://github.com/abc/def并将其复制到Xyz的子目录中。所以你有类似的东西:
Xyz/
.git/
def/somefile.js
def/anotherfile.csv
def/... more stuff
something.dat
whatever.txt
... even more stuff
然后,您对def/
中的内容以及def/
之外的内容进行了一些小修改并提交。然后又一次又一次。
现在您意识到需要针对最新版本的https://github.com/abc/def进行更新 - 如何才能完成?有没有办法将目录转换为子模块,然后以某种方式重新整合https://github.com/abc/def的历史并使其远程?
答案 0 :(得分:2)
你有几个选择。
如果你想让项目成为一个子模块并且它总是一个子模块(重写历史),那么它很棘手。你有一个令人讨厌的过滤器分支,你还必须用一个适当的子模块引用替换目录。您还必须返回并将所有工作重放到子模块中以创建所有这些引用。
更容易就是让它成为未来的子模块。在子模块中进行分支/应用/合并以获取最新信息,从原始项目中获取目录,添加子模块,然后继续维护。
更简单的可能是从原始导入SHA中简单分支,将最新版本从github应用到该分支,然后将该分支合并到主线中。在这种情况下不需要子模块。