有没有办法在不克隆的情况下将git子模块添加到repo中?

有没有办法在不克隆的情况下将git子模块添加到repo中?,git,git-submodules,Git,Git Submodules,我有一个很长的回购清单,我正试图通过将它们全部制作成子模块,将它们制作成单亲回购 我已经尝试手动将它们添加到.gitmodules以及.git/config,但似乎不起作用 我还试过运行git子模块sync和git子模块更新--init等,但没有成功 有没有办法让git认为我的项目有所有(~30K)子模块,而不需要克隆它们 有没有办法让git认为我的项目有所有(~30K)子模块,而不需要克隆它们 ~30K子模块? 您是否正在尝试克隆所有github存储库 在一个项目中有这么多子模块是没有意义的

我有一个很长的回购清单,我正试图通过将它们全部制作成子模块,将它们制作成单亲回购

我已经尝试手动将它们添加到
.gitmodules
以及
.git/config
,但似乎不起作用

我还试过运行
git子模块sync
git子模块更新--init
等,但没有成功

有没有办法让git认为我的项目有所有(~30K)子模块,而不需要克隆它们

有没有办法让git认为我的项目有所有(~30K)子模块,而不需要克隆它们

~30K子模块?
您是否正在尝试克隆所有github存储库

在一个项目中有这么多子模块是没有意义的


有没有办法让git认为我的项目已经完成了

不,这是子模块的用途,包含第三方(也可以是您的)依赖项,这些依赖项将在其自己的存储库中进行管理

正如您在图像中看到的,子模块只是项目中的一个子项目。你要问的是,是否有办法告诉git我有这个项目,而我们根本没有

这是做不到的。

在互联网上走了很长一段路后,我发现你可以通过直接在git索引中写入并创建“gitlink”文件类型来实现你想要的

git update-index [--add] --cacheinfo 160000 <subrepo commit hash> <submod path>
git更新索引[--add]--cacheinfo 160000

另外,不要忘记在
.gitmodules
中编写子repo(主要是声明外部路径)。

只需使用
gitadd

git子模块
命令就是用来帮助解决嵌套存储库的问题的

有些人喜欢简单的抽象,它规定并限制了用任意复杂的具体实现可以做什么


Git更喜欢简单的实现,这些实现可以做无限的、任意的事情,将抽象放在它们作为助手的适当位置,以及谈论可能发生的事情的方式。试图把你能用一堆快照做的所有事情都放进vcs抽象的狭隘束缚中是一件疯狂的事情。子模块只是一个dag引用。“把这只狗的尖端放在这里”。submodule命令只是帮助您查找该dag的源代码的工具,并保护它免受您每天对工作过度的可怜文件系统所做的所有暴力行为。

欺骗Git没有多大意义。如果您只需要一份回购协议列表,那么文本文件就可以了。或构建系统,。子模块的要点是,你说需要回购协议,因此它被克隆了。理论上,您可以克隆
--depth 1
,但它只能工作一次,并且只有当所有子模块都连接到这些repo的头部时才能工作。那么任何改变都可能会破坏一切。这没什么意义。你能更好地描述一下你的情况和你想要实现的目标吗。可能有另一种解决方案。为什么不将您的~30K repo放在Git服务器(如Gitolite或GitHub)中呢。对于错误的问题,使用主回购似乎是错误的解决方案。看看这个问题:“本地方法”唯一的问题是
.gitmodules
中的URL。如果您只是使用本地子模块引用,您会在repo cloning上遇到问题,但从技术上讲,这是可能的,而且看起来并不太麻烦。顺便说一句。的确,拥有大约30K个子模块似乎,嗯,很奇怪。你确定你的最终目标需要它吗?“只需使用
git add
”。。。怎么做?我忍不住想知道我们怎样才能用纯粹的
git add
添加子模块。他可能建议根本不要使用子模块?您的响应与上下文无关。父存储库存储对来自子存储库的特定提交的引用,但它不需要实际拥有子存储库数据。实际上,克隆父存储库时,默认行为是根本不从子存储库获取任何数据。我在本地机器上有两个项目,我已经将它们推到Github上,我需要确保Github知道repo A是repo B的子模块。我该怎么办?我尝试了您的解决方案。我运行代码
git更新索引--add--cacheinfo 160000 46a17436b49566b11492624c46d0fcf8db63458git@ramwin.com:~/submodule.git
,但错误显示
错误:无效路径'git@ramwin.com:~/submodule.git'致命:git更新索引:--cacheinfo无法添加git@ramwin.com:~/submodule.git
。我如何解决它?我确信
git@ramwin.com:~/submodule.git
处于活动状态,因为命令
git clonegit@ramwin.com:~/submodule.git
工作正常。如果我运行
git更新索引--add--cacheinfo 160000 d020b3a97f131ad11fb15bd8cce1774b0eb54c7b small,它就会工作。非常感谢。这也适用于将现有子模块更新为其他版本。