可以追溯创建一个git子模块吗?

时间:2014-10-14 14:53:35

标签: git github

我已经看过很多关于使用子模块的教程,但它们似乎都有两个常见的用例之一。

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的历史并使其远程?

1 个答案:

答案 0 :(得分:2)

你有几个选择。

如果你想让项目成为一个子模块并且它总是一个子模块(重写历史),那么它很棘手。你有一个令人讨厌的过滤器分支,你还必须用一个适当的子模块引用替换目录。您还必须返回并将所有工作重放到子模块中以创建所有这些引用。

更容易就是让它成为未来的子模块。在子模块中进行分支/应用/合并以获取最新信息,从原始项目中获取目录,添加子模块,然后继续维护。

更简单的可能是从原始导入SHA中简单分支,将最新版本从github应用到该分支,然后将该分支合并到主线中。在这种情况下不需要子模块。