Git子模块添加:“添加”;在本地可以找到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子模块
子命令。
我已经建立了一个服务器,我可以在上面使用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