将子模块克隆到目录中

时间:2012-12-19 01:15:34

标签: git git-submodules

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

例如,这可以按预期工作:

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

但是,当我运行以下命令时,项目将添加到.gitmodules并创建一个存储库,但不会删除任何代码(即使在{{1}之后})。该命令不会产生任何输出。

git submodule update --init

5 个答案:

答案 0 :(得分:3)

尝试运行

git submodule init
git submodule update
添加子模块后

更新1

试试这个:

cd lib/someproject
git status

您应该看到# Not currently on any branch.

之类的内容

如果没有,那么就没有git repo存在,你可能偶然发现了一个git bug,如果你看到上面的消息,请执行以下操作:

git checkout master
git pull

答案 1 :(得分: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

答案 2 :(得分:2)

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

  1. 删除子模块:rm -rf lib/someproject
  2. .gitmodules文件
  3. 中删除子模块
  4. .git/config文件
  5. 中删除子模块
  6. 删除.git/modules/someproject
  7. 然后再次运行git add submodule命令。非常感谢所有那些把我推向正确方向的回答者!

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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