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中删除它,然后提交更改。 之后,您可以将该文件夹添加为子模块。
上一篇: Git submodule add: "a git directory is found locally" issue