将子模块克隆到目录中

问题描述 投票:4回答:5

我在项目中创建子模块时遇到了一个问题,如果我直接在版本库根目录下创建子模块,一切正常。如果我直接在版本库根目录下创建子模块,一切正常。如果子模块再深一点,版本库就不会被克隆。

例如,这可以按照预期工作。

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

然而,当我运行下面的命令时,项目被添加到... .gitmodules 和一个 虚空 仓库被创建,但没有任何代码被拉下(即使在一个 git submodule update --init). 该命令不产生任何输出。

git submodule add git://someproject.com/.git lib/someproject
git git-submodules
5个回答
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

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.combookenGit-Tools-Submodules。


2
投票

看来之前添加子模块的尝试让我的版本库处于不良状态。在执行这些步骤后,我能够正确地克隆子模块。

  1. 删除子模块 rm -rf lib/someproject
  2. 将子模块从 .gitmodules 档案
  3. 移除子模块 .git/config 档案
  4. 移除 .git/modules/someproject

然后运行 git add submodule 指挥再次奏效。非常感谢所有的回答者,他们把我推到了正确的方向!


0
投票

我刚刚读完O'Reilly书中的子模块部分,作者提到当添加一个子模块时(在他的例子中,手动使用git add到项目根部的克隆repo),包括尾部的斜杠会导致它将文件夹添加到索引中,而不是创建一个git链接。这听起来很傻,但也许可以尝试在添加之前将目录改为lib,以确保这种情况不会发生在你身上,因为你的子模块路径中的斜杠。

这也可能是 "submodule add "只接收路径和远程url的特殊性,并在写入configs时从路径中推断出子模块名称。 也许可以手动编辑gitmodules和config条目,以确保子模块的名字中没有'lib',但路径中包含它。


0
投票

我不得不删除 .gitmodules 并再次添加子模块,用 --force 选项,例如: . git submodule --force add git://someproject.com/.git. 此外,由于我使用Docker文件来安装一个特定的.gitmodules子模块,我也在那里强制更新了 RUN git submodule update --init -f someproject. 不过,我觉得强行添加又解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.