这是我的 .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/