4

我在项目中创建子模块时遇到问题。如果我直接在存储库根目录中创建子模块,一切正常。如果子模块更深,则不会克隆存储库。

例如,这按预期工作:

git submodule add git://someproject.com/.git someproject

但是,当我运行以下命令时,项目被添加到.gitmodules并创建了一个存储库,但没有代码被拉下(即使在 a 之后git submodule update --init)。该命令不产生任何输出。

git submodule add git://someproject.com/.git lib/someproject
4

5 回答 5

3

尝试运行

git submodule init
git submodule update

添加子模块后。

更新 1

试试这个:

cd lib/someproject
git status

你应该看到类似的东西# Not currently on any branch.

如果没有,则不存在 git repo,并且您可能偶然发现了 git 错误,如果您看到上述消息,请执行以下操作:

git checkout master
git pull
于 2012-12-19T01:26:14.657 回答
2

您需要运行以下命令

git submodule update --init lib/someproject

出于某种原因,git 在子模块上运行和更新时只查看根目录,而不是查看整个工作副本。

还要确保您的.gitmodules文件包含这样的条目:

[submodule "someproject"]
    path = lib/someproject
    url = git://someproject.com/.git

您的.git/config文件包含:

[submodule "someproject"]
    url = git://someproject.com/.git

文件:

http://git-scm.com/book/en/Git-Tools-Submodules

于 2012-12-19T05:01:34.497 回答
2

之前添加子模块的尝试似乎使我的存储库处于错误状态。执行以下步骤后,我能够正确克隆子模块:

  1. 删除子模块:rm -rf lib/someproject
  2. .gitmodules文件中删除子模块
  3. .git/config文件中删除子模块
  4. 消除.git/modules/someproject

然后git add submodule再次运行该命令。非常感谢所有将我推向正确方向的回答者!

于 2012-12-20T01:35:14.650 回答
0

我刚刚阅读了 O'Reilly 书的子模块部分,作者在添加子模块时提到(在他的示例中手动使用 git add 到项目根目录的克隆存储库),包括尾部斜杠会导致它将文件夹添加到索引与创建 gitlink。这听起来很傻,但也许在添加之前尝试将目录更改为 lib 以确保由于子模块路径中的斜杠而不会发生这种情况。

这也可能是“子模块添加”仅接收路径和远程 url 并在写入配置时从路径推断子模块名称的特性。也许手动编辑 gitmodules 和配置条目以确保子模块的命名没有“lib/”,但路径包含它。

于 2012-12-19T06:53:41.607 回答
0

我不得不删除内容.gitmodules并再次使用--force选项添加子模块,例如git submodule --force add git://someproject.com/.git。另外,由于我使用 Dockerfile 来安装 .gitmodules 的特定子模块,因此我也强制在那里进行更新RUN git submodule update --init -f someproject。但是,我认为再次强制添加解决了这个问题。

于 2020-05-22T21:41:06.527 回答