为什么从GitHub递归子模块更新失败DoctrineMongoORMModule?(Why doe

2019-09-16 18:41发布

这是不是我做错了,或者更广泛的错误吗?

如果我在一个空目录下执行以下Git命令:

git init
git submodule add https://github.com/doctrine/DoctrineMongoODMModule \vendor\DoctrineMongoODMModule
git submodule update --init --recursive

在一切顺利的话,多个子模块拉,然后失败,出现以下的输出:

fatal: not a git repository: ../../../../../../../../../../.git/modules/vendor/DoctrineMongoODMModule/modules/vendor/mongodb-odm/modules/lib/vendor/doctrine-mongodb/modules/lib/vendor/doctrine-common
Unable to find current revision in submodule pat 'lib/vendor/doctrine-common'

我做更多的挖掘。 在导致问题的辅助模块中的git的文件具有以下内容:

gitdir: ../../../../../../../../../../.git/modules/vendor/DoctrineMongoODMModule/modules/vendor/mongodb-odm/modules/lib/vendor/doctrine-mongodb/modules/lib/vendor/doctrine-common

我已经检查了gitdir路径,它确实存在。 不过,我使用的是Windows XP机器,如果我尝试这个从命令提示符我有问题:

C:\xds\sds\vendor\DoctrineMongoODMModule\vendor\mongodb-odm\lib\vendor\doctrine-
mongodb\lib\vendor\doctrine-common>cd ../../../../../../../../../../.git/modules
/vendor/DoctrineMongoODMModule/modules/vendor/mongodb-odm/modules/lib/vendor/doc
trine-mongodb/modules/lib/vendor/doctrine-common
The system cannot find the path specified.

看来,目录更改字符串太长,因为如果我把它分成两个部分工作原理:

C:\xds\sds\vendor\DoctrineMongoODMModule\vendor\mongodb-odm\lib\vendor\doctrine-
mongodb\lib\vendor\doctrine-common>cd ../../../../../../../../../../.git/modules
/vendor/DoctrineMongoODMModule/modules/vendor/mongodb-odm/modules/lib/vendor/doc
trine-mongodb/

C:\xds\sds\.git\modules\vendor\DoctrineMongoODMModule\modules\vendor\mongodb-odm
\modules\lib\vendor\doctrine-mongodb>cd modules/lib/vendor/doctrine-common

C:\xds\sds\.git\modules\vendor\DoctrineMongoODMModule\modules\vendor\mongodb-odm
\modules\lib\vendor\doctrine-mongodb\modules\lib\vendor\doctrine-common>

任何建议或帮助,将不胜感激。 干杯。

Answer 1:

好了,我的工作出了问题。 MINGW32具有路径长度的限制,这是关系到windows路径长度限制(参见MSDN )。 问题是通过缩短gitdir路径克服。 而不是使用相对路径,我把它改成一个绝对路径,女巫elimaties ../../../../../../../../../../从在gitdir字符串,以换取c:/xds/sds 。 这缩短仅仅是足够多的,使这一切去。



Answer 2:

你在做错误的URL子模块。 (如果您检查网址你在你的命令没有使用https:\\github.com\doctrine\DoctrineMongoORMModule ),你会发现,你得到一个404错误。 该项目正确的URL或者是https://github.com/doctrine/DoctrineMongoODMModule.gitgit://github.com/doctrine/DoctrineMongoODMModule.git (可从两个按钮HTTPGit Read-Only顶部)。

为了解决这个问题,打开.gitmodules在库的根目录下,寻找像线

[submodule]
    path = \vendor\DoctrineMongoORMModule
    url = https:\\github.com\doctrine\DoctrineMongoORMModule

并通过正确的更换网址。 您也可以替换所有的向前斜线与反斜线和路径删除前导斜杠(如果你不想在你的根目录中结束)。 最后,重新运行一个命令git submodule update --init --recursive



Answer 3:

正如superdweebie说,存在在GIT目录路径的长度的问题。 但他并没有说在那里你可以找到gitdir字符串:

它位于你的递归子模块(克隆之一)内的.git



Answer 4:

我得到了同样的错误,并修复它,但我不认为它有一个像superdweebie说到做到与Windows路径长度的限制。 它只是像错误说Unable to find current revision in submodule pathThe system cannot find the path specified 。 你必须手动编辑正确的相对路径.git文件或使用绝对路径。



文章来源: Why does recursive submodule update from github fail for DoctrineMongoORMModule?