我正在尝试在我的git repo中添加一个子模块,我收到了这个错误:
remote origin does not have a url defined in .git/config
关于这可能是什么的任何想法?我试着谷歌搜索它,但只有一个模糊的链接出现。
我这样做:
git submodule add ../extern/Lib1 lib
我希望这能创建一个子模块lib/Lib1
我知道这只会创建一个引用,然后我必须更新/ init(在这部分不清楚,没有那么远;我只是学习子模块命令)。
答案 0 :(得分:30)
../extern/Lib1
是否引用Git存储库?
如果没有,Git就不会知道如何将Git repo url改为.gitmodule
另外,试试:
lib
不已存在(甚至为空)子模块的一些好消息来源是:
由于此处只有绝对路径,因此相对路径需要与之进行比较的参考
该引用是“远程源”,它应该在您的DirName/NewRepo_withSubmodules/.git/config
文件中,如下所示:
$ cat .git/config
...
[remote "origin"]
url = /path/to/DirName/NewRepo_withSubmodules/.git
fetch = +refs/heads/*:refs/remotes/origin/*
...
如果您在../DirName/NewRepo_withSubmodules/.git/config
文件中有该部分,则应该能够使用相对路径将../Extern/Lib1
添加为子模块。
以上所有内容都来自git子模块手册页的以下部分:
<repository>
是新子模块的原始存储库的URL 这可以是绝对网址,或者(如果它以./
或../
开头),相对于超级项目的origin
存储库的位置< /强>
因此,如果NewRepo_withSubmodules
是刚刚创建的本地Git仓库(当然没有“原点”),则应该定义一个人为的“远程原点”(即使原点指向自身) ,如果只允许使用其他子模块存储库的相对URL。
Git 2.13(2017年第二季度)将改进子模块默认原点的检测。
commit d1b3b81见Stefan Beller (stefanbeller
)(2017年2月25日)
(Junio C Hamano -- gitster
--于2017年3月10日commit ae900eb合并)
submodule init
:警告回到本地路径
<repository>
是新子模块的原始存储库的URL 这可以是绝对URL,或者(如果它以./
或../
开头),相对于超级项目的默认远程存储库的位置
(请注意,要指定位于超级项目“foo.git
”旁边的存储库“bar.git
”,您必须使用“../foo.git
”代替“{{1正如人们在遵循相对URL规则时所期望的那样 - 因为Git中相对URL的评估与相对目录的相同。)默认遥控器是当前分支的远程跟踪分支的遥控器 如果不存在此类远程跟踪分支或已分离
./foo.git
,则假定“HEAD
”为默认远程。 如果超级项目没有配置默认远程,则超级项目是其自己的权威上游和当前。 改为使用工作目录。
Git 2.20(Q8 2018)改进了子模块的本地路径支持。
commit e0a862f见Stefan Beller (stefanbeller
)(2018年10月16日)
(由Junio C Hamano -- gitster
--合并于commit 3fc8522,2018年11月6日)
origin
:如果需要,将相对URL转换为绝对URL“
submodule helper
”调用的子模块助手update_clone
, 如果需要,克隆子模块。
由于子模块过去有指示它们是否处于活动状态的URL,因此解析相对URL的步骤是在“git submodule update
”步骤中完成的。现在可以将子模块配置为活动而不调用显式初始化,例如,通过配置submodule init
。当尝试获取以这种方式设置为活动的子模块时,我们将会这样做 回退到
submodule.active
中找到的URL,该URL可能与...相关 超级项目,但我们还没有解决它,但是:.gitmodules
要解决此问题,请分解解析相对的函数 “
git clone https://gerrit.googlesource.com/gerrit cd gerrit && grep url .gitmodules url = ../plugins/codemirror-editor ... git config submodule.active . git submodule update fatal: repository '../plugins/codemirror-editor' does not exist fatal: clone of '../plugins/codemirror-editor' into submodule path '/tmp/gerrit/plugins/codemirror-editor' failed Failed to clone 'plugins/codemirror-editor'. Retry scheduled [...] fatal: clone of '../plugins/codemirror-editor' into submodule path '/tmp/gerrit/plugins/codemirror-editor' failed Failed to clone 'plugins/codemirror-editor' a second time, aborting [...]
”中的网址(在git submodule init
函数的子模块帮助程序中),并在init_submodule
帮助程序中的适当位置调用它。
答案 1 :(得分:4)
我正在尝试同样的事情,并发现以下'似乎有效:
我(在Windows上):
D:/phd/analyses
/analysis1/ #This is an existing repository
/analysis2/ #another existing repository
/analysis3.tex
/analysis4.tex
...
/analysisN.tex
analysis1.tex ... analysisN.tex
包含我尚未处理过的想法(比如说“存根”),analysis1/
和analysis2/
是我正在处理的事情(因此有代码,tex, ... 在他们中)。一旦我开始处理其他分析,他们将被移动到他们自己的文件夹,因此他们自己的存储库。
我所做的是(在分析中的git bash中):
git init
git add *.tex
git remote add self .
git submodule add self:/analysis2/.git analysis2
git submodule add self:/analysis5/.git analysis5
git commit -m "Initial commit"
这似乎有效。
D:/phd/analyses/.git/config
看起来应该如此,.gitmodules
看起来像:
[submodule "analysis2"]
path = analysis2
url = self:analysis2/.git
[submodule "analysis5"]
path = analysis5
url = self:analysis5/.git
此致 西蒙克纳普
答案 2 :(得分:1)
(我在这里总结了解决方案。感谢VonC。)
在包含存储库(例如containing.git/
)中,git
将相对路径解释为相对于未定义的origin
远程路径。我们希望它相对于containing.git/
目录,所以运行
git remote add origin ..
(不确定为什么它是..
而不是.
。)
现在您可以添加子模块:
git submodule add ../extern/Lib1 lib