git子模块未拉取子模块中的文件

53

我原以为使用Git子模块来开发和部署我的应用程序是正确的,因此已经对这个新项目做了深入思考。

我创建了一个Drupal Git仓库,并将其初始化为Drupal 7.12标签。然后我创建了自己的分支,并在sites/all/modules/contrib下添加了所需的模块,使用命令:git submodule add --branch 7.x git://path/to/drupal/module sites/all/modules/contrib/module

然后我认为,通过将我的Repo推送到GitHub,我就可以简单地拉取它,然后它将把所有子模块拉取到部署路径中。但即使我执行以下操作:

git submodule foreach git pull

或者

git submodule init

接着是

git submodule update

我的所有模块也没有被拉取。

结果证明我错了。现在我需要用另一种方式重新做一遍吗?如果是,请告诉我如何操作;如果不是,请让我知道怎么做。

3个回答

105
你fork了Drupal的仓库?它是否已经添加了子模块在.gitmodules中?如果是这样,那么你只需要克隆他们的分支并执行。
git submodule init
git submodule update

您不需要将他们自己的子模块重新添加到仓库中。

现在,如果您想添加其他子模块,则每次克隆仓库时都必须执行git submodule init; git submodule update。它不会自动获取子模块。


4
对我来说,“git submodule init”和“git submodule update”解决了问题。我不知道当你克隆仓库时,git不会自动拉取子模块。 - michaelday
1
为了方便起见,您可以创建一个别名命令:alias gitup='git submodule init && git submodule update' - ahuigo
2
请考虑删除关于子模块不值得的评论,或者提供一两个链接。感谢您的回答。 - Dan Rosenstark
1
@DanRosenstark 同意,我会删除它。自从我写这篇文章以来,子模块已经发生了巨大的变化。如果你有权限,请随意编辑我的答案,我会接受并删除这条评论。 - Andrew T Finnell
1
从我所了解的有关子模块的所有内容来看,它们并不值得。它们会引起太多问题。 - Dan Rosenstark
显示剩余5条评论

5
如果子模块的文件无法被拉取,您可以尝试从本地仓库中删除子模块的文件夹。然后尝试执行以下命令:
``` git submodule update ```
它应该会显示:
``` Submodule path '': checked out '' ```
检查一下,您的文件现在应该已经被拉取了。
如果这样还是失败了,请删除文件夹并尝试以下命令:
``` git submodule update --init --recursive git submodule update --recursive --remote ```

0
如果子模块没有被拉取,请确保您已经添加了它。
例如:
git submodule add https://github.com/chaconinc/DbConnector 我之前也遇到了同样的问题,运行上述命令后问题解决了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接