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

vmo*_*eco 159 git git-submodules

我实际上是在尝试学习如何使用git,包括"git submodule"子命令.我已经设置了一个服务器,我可以使用ssh托管,推送和拉取git存储库.我在这个服务器上创建了一个主要的git存储库"Travail",我希望将所有项目都作为子模块.

在我的Travail存储库中,我已经添加了一个我的项目作为子模块git submodule:我能够开发这个子模块,推送和拉动它.

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

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf
Run Code Online (Sandbox Code Playgroud)

'projets/fdf'的git目录在本地找到,其中包含remote: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'选项的名称.

实际上没有子目录 tools/libft

我在另一个线程上读到我应该使用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
Run Code Online (Sandbox Code Playgroud)

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

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

jbm*_*rom 352

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

这最终对我有用(这篇文章有很多帮助):

如果您还没有运行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

  • 这真的很有帮助,因为我找不到其他有用的东西.与其他建议的主要区别在于您的第3步.谢谢! (36认同)
  • 我必须删除 `.git/modules/module_name` 才能使其正常工作 (27认同)
  • 我需要步骤2和3. (8认同)
  • 我需要第3步,但为什么子模块也存在呢? (8认同)
  • 即使第 3 步对我也不起作用。我只有一个子模块,所以我删除了整个 `.git/modules` 并且最终工作正常。 (4认同)

pja*_*mer 42

我尝试了jbmilgrom的解决方案,特别是我尝试过git rm --cache,但由于目录/子模块不存在,这对我不起作用.对我有用的是:

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

--forcegit submodule命令和rm所有其他目录中尝试后执行此操作,推送到主控等...目录不存在且没有缓存的原因.事实证明,.git/modules这就是这个错误所在.

  • 这是我使用的解决方案。其他的对我不起作用,因为该目录不在磁盘上,因为 git 实际上无法正确克隆子模块(远程存储库没有分支,因此 git 无法克隆它。或者其他什么。) (2认同)

bre*_*hin 15

您可能'projets/fdf'已从磁盘中删除了,但您的Git存储库仍然拥有它.用于git rm -rf projets/fdf从Git中删除它,然后提交更改.之后,您将能够将此文件夹添加为子模块.

  • @ tom-mcfarlin最后,我从.gitmodule和.git/modules中的文件夹中删除了行,然后它让我添加了一个新的子模块.也许有更好的方法来做到这一点,但我已经没时间了.如果你要这样做,我建议你做一个好的备份,请不要责怪我,如果你出错了.祝好运. (40认同)
  • 当我这样做时,我被告知该目录不存在.似乎它既存在又不存在:/ (21认同)
  • @NathanHornby @Sparklos @TomMcFarlin - 在更新版本的git中,你会发现git-submodule在.git文件夹中添加了一个目录.例如,如果你在目录`/ tmp/repo`,然后运行`git submodule add ../ otherrepo.git`,那么你会看到`/ tmp/repo/.git/modules/otherrepo`文件夹存在.这就是问题所在.我从.git手动删除了该文件夹,一切正常. (10认同)
  • 谢谢,我在另一篇文章中发现从.git/modules中删除该文件夹,这对我有用.有道理,因为这就是错误所说的冲突...我只是不知道那个文件夹 (5认同)

Dmi*_*117 13

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

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


W.P*_*rin 7

这两个命令对我有用。

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
Run Code Online (Sandbox Code Playgroud)