Git子模块添加:“添加”;在本地可以找到git目录";问题

Git子模块添加:“添加”;在本地可以找到git目录";问题,git,git-submodules,Git,Git Submodules,我实际上在学习如何使用git,包括git子模块子命令。 我已经建立了一个服务器,我可以在上面使用SSH托管、推送和拉取git存储库。 我在这台服务器上创建了一个主要的git存储库“Travail”,我想把我的所有项目作为子模块放在其中 在我的Travail存储库中,我已经在tools/libft中添加了一个项目作为子模块: 我能够开发这个子模块,推拉它 但是,当我尝试添加另一个子模块(名为fdf,来自服务器上的fdf.git)时,我遇到了以下问题: git submodule add ssh:/

我实际上在学习如何使用git,包括
git子模块
子命令。 我已经建立了一个服务器,我可以在上面使用SSH托管、推送和拉取git存储库。 我在这台服务器上创建了一个主要的git存储库“Travail”,我想把我的所有项目作为子模块放在其中

在我的Travail存储库中,我已经在
tools/libft
中添加了一个项目作为子模块: 我能够开发这个子模块,推拉它

但是,当我尝试添加另一个子模块(名为fdf,来自服务器上的fdf.git)时,我遇到了以下问题:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf
“projets/fdf”的git目录在本地与远程服务器一起找到: 起源ssh://git@三十、 XXX.XXX.XXX:XXXXX/opt/git/fdf.git 如果要重用此本地git目录,而不是再次从 ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git 使用“--force”选项。如果本地git目录不是正确的repo 或者您不确定这意味着什么,请使用“--name”选项选择另一个名称

projets/

我在另一个线程上读到,我应该使用
git submodule sync
或编辑.gitmodules文件,其中指向我的子模块的源存储库的URL可能已更改

但是my.gitmodules文件只包含关于我的第一个子模块(tools/libft)的信息,而不包含关于projets/fdf的信息:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git
作为一名法国学生,我可能会在我的英语文档中遗漏一些东西,但我搜索了一下,我真的不明白为什么会出现这个问题


如果我能得到一个解决方案,我会很高兴,但仅仅是一个解释也会很有帮助。

您可能已经从磁盘上删除了您的
'projets/fdf'
,但您的Git存储库仍然保留着它。使用
git rm-rf projets/fdf将其从git中删除,然后提交更改。之后,您可以将此文件夹添加为子模块。

我来到这里,试图添加一个子模块,其路径与我最近删除的子模块相同

这就是最终对我起作用的原因():

如果您尚未运行
git-rm——到子模块的缓存路径(无尾随斜杠)以及
rm-射频路径到子模块

然后:

  • .gitmodules
    文件中删除相关行。e、 g.删除这些:
  • 从.git/config中删除相关部分。e、 g.删除这些:
  • rm-rf.git/modules/path\u to\u子模块
  • 然后,您最终可以:


    git子模块添加https://github.com/path_to_submodule

    我尝试了jbmilgrom的解决方案,特别是我尝试了
    git rm--cache
    ,但这对我也不起作用,因为目录/子模块不在那里。对我起作用的是:

  • rm-rf.git/modules/blah
  • git子模块添加git://path.to.new

  • 我是在尝试了
    --force
    git子模块中
    命令和
    rm
    所有其他目录、push to master等之后做这件事的。。。目录不存在,也没有缓存的原因。在
    .git/modules
    中发现了此错误。

    如果您已经像我一样删除了子模块目录,请按照jbmilgrom的其余说明进行操作。关键是
    rm-rf.git/modules/path_to_submodule
    ,但请继续首先备份整个父repo目录


    如果您只有一个子模块,只需删除
    .gitmodules

    这两个命令就可以了

    rm path/to/submodule -rf
    rm .git/modules/path/to/module -rf
    

    您可以在克隆子模块时执行此操作:

    git submodule add--name submodule\u name submodule path

    这将把子模块添加到项目中,并将作为结构添加到
    .gitmodules
    文件下


    然后,如果您不想要旧的,可以将其从
    .gitmodules
    结构中删除,并从项目中删除子模块文件夹。

    一个小更正:它是“存储库”,而不是“存储库”。这不是一个真正的答案,但如果项目彼此独立,那么每个项目最好有自己的回购协议,而不是子模块。谢谢,我更正了。我知道,但我希望将我的所有工作集中在同一回购协议中,但作为单独的项目。当我从家到学校的时候,我可以选择更新我的全部工作,反之亦然(为了学习如何使用这些工具,我很好奇;))嗯,好奇总是一个很好的理由!:)这很奇怪。你确定你以前没有添加子模块吗?没有,而且我没有问题在~/中克隆fdf.git。在分娩过程中/我没有发现fdf的痕迹。只是libft:/噢,等等,我在
    /Travail/.git/modules/projets/
    中查找了一个
    fdf
    目录。这似乎不在工作树中,而是在较旧的提交中。它能产生问题吗?它起作用了:)谢谢。我想我确实犯了这个错误。当我这样做的时候,我被告知目录不存在。似乎它既存在又不存在:/@tom mcfarlin最后,我从.gitmodule中删除了行,从.git/modules中删除了一个文件夹,然后它让我添加了一个新的子模块。也许有更好的办法,但我没时间了。如果你要走这条路,我建议你做一个好的备份,如果你出了问题,请不要怪我。祝你好运。谢谢你,我在另一篇文章中找到了从.git/modules中删除该文件夹的方法,这对我很有效。这是有道理的,因为这就是错误所说的冲突。。。我只是不知道folder@NathanHornby@Sparklos@TomMcFarlin——在更新版本的git中,您会发现git子模块在.git文件夹中添加了一个目录。例如,如果您位于目录
    /tmp/repo
    ,然后运行
    git submodule add../otherrepo.git
    ,您将看到
    /tmp/repo/.git/modules/otherrepo
    文件夹存在。这就是我的问题所在。我用手拍了张照片
    [submodule "path_to_submodule"]
            url = https://github.com/path_to_submodule
    
    rm path/to/submodule -rf
    rm .git/modules/path/to/module -rf