Git 不会初始化/同步/更新新的子模块

标签 git git-submodules

这是我的 .gitmodules 文件的部分内容:

[submodule "src/static_management"]
        path = src/static_management
        url = git://github.com/eykd/django-static-management.git
[submodule "external/pyfacebook"]
        path = external/pyfacebook
        url = http://github.com/sciyoshi/pyfacebook.git

但是,.git/config 只包含第一个:

[submodule "src/static_management"]
        url = git://github.com/eykd/django-static-management.git

第二个子模块 (external/pyfacebook) 由另一个开发人员添加到功能分支中。我现在已经继承了开发,并查看了功能分支。但是,Git 不会为我 pull 子模块。我试过:

  • git 子模块初始化
  • git 子模块更新
  • git submodule update --init
  • git 子模块同步
  • .git/config 中删除所有子模块定义并运行 git submodule init。它只复制以前存在的子模块并忽略新的子模块。
  • 手动在 .git/config 中输入新的子模块定义并运行 git submodule update。只有以前存在的子模块才需要更新。

在各种组合中,但 git 根本不会根据 .gitmodules 的新内容更新 .git/config,也不会创建 external/pyfacebook 文件夹并 pull 子模块的内容。

我错过了什么?是否真的需要手动干预(手动将子模块条目添加到 .git/config),为什么?

编辑:手动干预不起作用。手动将新的子模块条目添加到 .git/config 不会做任何事情。忽略新的子模块。

最佳答案

我遇到了同样的问题 - 结果证明 .gitmodules 文件已提交,但实际的子模块提交(即子模块的提交 ID 的记录)没有提交。

手动添加似乎可以解决问题 - 例如:

git submodule add http://github.com/sciyoshi/pyfacebook.git external/pyfacebook

(即使没有从 .git/config 或 .gitmodules 中删除任何内容。)

然后提交它以正确记录ID。

为这个工作答案添加一些进一步的评论:如果 git submodule init 或 git submodule update 不起作用,那么如上所述 git submodule add url 应该可以解决问题。可以通过

交叉检查
 git config --list

并且应该在 git config --list 命令的结果中得到一个你想要 pull 的子模块的条目。如果在配置结果中有你的子模块的条目,那么现在通常的 git submodule update --init 应该 pull 你的子模块。要测试此步骤,您可以手动重命名子模块,然后更新子模块。

 mv yourmodulename yourmodulename-temp
 git submodule update --init

要了解子模块中是否有本地更改,可以通过 git status -u(如果你想查看子模块中的更改)或 git status --ignore-submodules(如果你不想看到子模块中的更改)。

关于Git 不会初始化/同步/更新新的子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336995/

相关文章:

git - 如何在 git 子模块中更改 "commit"?

git - 差异只改变了部分行

新的未暂存文件的 Git 警告

git - C# 项目中的所有文件是否都需要置于版本控制之下?

git - 用 git 子模块替换了第三方代码,现在我不能切换分支

git submodule update - 为什么从顶层开始

复制文件的 Git diff

git - 确定为什么 github 说 "Closed with unmerged commits"

android - 尽管删除 git 子模块仍出现 "detached HEAD"错误

git - 如何防止git中未推送的子模块