Git子模块添加:“一个git目录find本地”的问题

其实我正在学习如何使用git,包括“git submodule”子命令。 我已经build立了一个服务器,我可以托pipe,通过使用SSH推拉Git仓库。 我在这个服务器上创build了一个主要的git仓库“Travail”,我想把所有的项目都放在子模块中。

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

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

 git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf A git directory for 'projets/fdf' is found locally with remote(s): origin ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git If you want to reuse this local git directory instead of cloning again from ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git use the '--force' option. If the local git directory is not the correct repo or you are unsure what this means choose another name with the '--name' option. 

实际上没有子目录在projets/

我读了另一个线程,我应该使用git子模块同步或编辑.gitmodules文件,其中我的子模块的源存储库的URL可能已经改变。

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

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

作为一名法国学生,我可能在我的英文文档中遗漏了一些东西,但是我search了一下,我真的不明白为什么我会遇到这个问题。

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

我来到这个SO后,试图添加一个子模块与我最近删除的子模块相同的path。

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

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

然后:

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

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

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

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

  3. rm -rf .git/modules/path_to_submodule

那么,你终于可以:

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

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

我试过jbmilgrom的解决scheme,特别是我试过git rm --cache ,那对我来说也不行,因为目录/子模块不在那里。 对我有效的是:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

我在git submodule命令和rm所有其他目录中执行了这个操作之后,把它们推到了主目录等等。目录不存在,并且没有caching的理由。 在.git/modules发现这是错误所在。

如果您已经像我一样删除了子模块目录,请遵循jbmilgrom指令的其余部分。 关键是rm -rf .git/modules/path_to_submodule但是请先行备份您的整个父目录repo目录

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