Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 将子模块克隆到目录中_Git_Git Submodules - Fatal编程技术网

Git 将子模块克隆到目录中

Git 将子模块克隆到目录中,git,git-submodules,Git,Git Submodules,我在项目中创建子模块时遇到问题。如果我直接在存储库根目录中创建子模块,一切正常。如果子模块更深,则不会克隆存储库 例如,这可以按预期工作: git submodule add git://someproject.com/.git someproject 但是,当我运行以下命令时,项目被添加到.gitmodules,并创建了一个空的存储库,但没有代码被删除(即使在git子模块更新--init之后)。该命令不产生任何输出 git submodule add git://someproject.co

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

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

git submodule add git://someproject.com/.git someproject
但是,当我运行以下命令时,项目被添加到
.gitmodules
,并创建了一个空的存储库,但没有代码被删除(即使在
git子模块更新--init
之后)。该命令不产生任何输出

git submodule add git://someproject.com/.git lib/someproject
试着跑步

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

更新1

试试这个:

cd lib/someproject
git status
您应该会看到类似于
#当前未出现在任何分支上的内容。

如果没有,则不存在git回购,如果看到上面的消息,您可能会偶然发现git bug,请执行以下操作:

git checkout master
git pull

您需要运行以下命令

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
文件:


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


这可能也是“submodule add”的一个特点,它仅接收路径和远程url,并在写入配置时从路径推断子模块名称。可能需要手动编辑gitmodules和config条目,以确保子模块的命名不带“lib/”,但路径包含它

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

  • 删除子模块:
    rm-rf lib/someproject
  • .gitmodules
    文件中删除子模块
  • .git/config
    文件中删除子模块
  • 删除
    .git/modules/someproject

  • 然后再次运行
    git add submodule
    命令。非常感谢所有的回答者,他们把我推向了正确的方向

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

    这似乎合乎逻辑,我也试过了。不幸的是,在运行这两个命令之后,什么也没有发生。(没有输出,没有新文件,什么都没有)。陌生人和陌生人<代码>git状态输出分支上的
    (空)。初始提交
    <代码>git签出主机输出
    错误:pathspec“master”与git已知的任何文件都不匹配
    目录中只有一个文件,
    .git
    文件。整个内容是
    gitdir:../../.git/modules/lib/someproject
    。(顺便说一句,谢谢你一直以来的帮助)我以为会是这样的。不幸的是,git报告
    错误:pathspec'lib/someproject'与git已知的任何文件都不匹配
    添加了
    .gitmodules
    文件应查看的内容以及
    .git/config
    文件OK。。。现在问题解决了。我会投票支持你的答案,因为它让我找到了正确的地方。不仅在.git/config文件中存在问题,而且在.git/modules文件夹中也存在问题!这是正确的答案。这个问题是因为我试图作为核心项目的子模块创建的存储库是空的,并且命令“gitsubmoduleadd”做了不好的事情。