2010-01-02 69 views
10

我得到了git submodule的hang((一厢情愿的想法?),我想出了更具体的问题,这是一个好兆头...最初只需要git子模块更新?

我试图找到哪个版本子模块的超级项目指在.gitmodules.git/config中,但没有提到那里......
这种情况是我在其根目录位置(从中导入它们)更改子模块,然后将它们拉到它们的位置're'submoduled“...
除了承诺从超级项目将这些变化纳入超级项目回购,我还需要做”​​“注册新的拉入子模块提交吗?

基本问题是:

,我需要“git submodule update”只有当我第一次克隆上层项目,或子模块的每拉后(从它自己的回购)?

谢谢

+0

对不起,对于迟到的答案,我没有看到你的新问题后,你的上一个(http://stackoverflow.com/questions/1979167) – VonC 2010-02-09 08:08:45

回答

15

正如我在前面的回答提到git submodule update,该命令签出项目,基地的具体版本在他们.gitmodules文件。

GitPro page does insist

这是关于子模块的重要一点:你记录他们的确切所处的提交。

你可以看到其呈交由“超级工程”中运行引用(一个引用一个或几个子模块):

  • git submodule status(除非你做了一些子模块内直接提交, thinat情况下,它会在任何子模块的HEAD已经从存储在上层项目的SHA-1)或
  • git ls-files --stage寻找模式“160000”项先进的SHA-1面前表现出“+”,在一个特殊的条目GI t指数。

这意味着,每当您在“超级项目”中执行git命令(可能会修改该子模块提交SHA1)时,您需要一个“git submodule update”。

只有当我第一次克隆超级项目时,或者在每次拉动子模块(从它自己的repo)之后,我是否需要“git submodule update”?

是的,您必须每次在主项目中下拉子模块更改时执行此操作。
这是因为您正在引用子模块原始回购所在的确切提交(如上所述),并且在您取回回购时,您正在有效修改该提交。