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

其实我正在学习如何使用git,包括“git submodule”子命令。 我已经建立了一个服务器,我可以通过使用ssh来托管,推拉git存储库。 我在这个服务器上创建了一个主要的git仓库“Travail”,我希望把我所有的项目都作为子模块。

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

但是当我尝试添加其他子模块(从我的服务器上的fdf.git命名为fdf)时,出现以下问题:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

'projets / fdf'的git目录在本地找到,使用远程(s):origin ssh://git@XXX.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子模块同步或编辑.gitmodules文件,其中我的子模块的源存储库的URL可能已更改。

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

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git

作为一名法国学生,我可能错过了我拥有的英文文档中的一些内容,但是我搜索了,我真的不明白为什么我会遇到这个问题。

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


我来到这个SO帖子,试图添加一个子模块,它具有与我最近删除的子模块相同的路径。

这是最终为我工作的原因(本文帮助了很多):

如果你还没有运行git rm --cached path_to_submodule (没有结尾的斜杠)以及rm -rf path_to_submodule ,那就做!

然后:

  • .gitmodules文件中删除相关的行。 例如删除这些:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  • 从.git / config中删除相关部分。 例如删除这些:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  • rm -rf .git/modules/path_to_submodule

  • 然后,你可以最终:

    git submodule add https://github.com/path_to_submodule


    我试过jbmilgrom的解决方案,特别是我尝试了git rm --cache ,这对于我来说并不适用,因为目录/子模块不在那里。 对我有效的是:

  • rm -rf .git/modules/blah
  • git submodule add git://path.to.new
  • 我在git submodule命令和rm所有其他目录中尝试了--force之后做了这些,将它们推到了主...等目录不存在,并且没有缓存的理由。 在.git/modules发现这是该错误所在的位置。


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

    链接地址: http://www.djcxy.com/p/92313.html

    上一篇: Git submodule add: "a git directory is found locally" issue

    下一篇: Windows cmd redirect subcommand output to file