3

这是我做错了什么,还是更广泛的错误?

如果我在一个空目录中执行以下 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 机器,如果我从 cmd 提示符尝试此操作,我会遇到问题:

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>

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

4

4 回答 4

4

好的,所以我解决了这个问题。Mingw32 有一个路径长度限制,这与 windows 路径长度限制有关(参见msdn)。通过缩短 gitdir 路径解决了问题。我没有使用相对路径,而是将其更改为绝对路径,../../../../../../../../../../来自 gitdir 字符串的巫婆 elimaties 以换取c:/xds/sds. 这种缩短足以让一切顺利。

于 2012-04-26T23:14:15.053 回答
2

正如 superdweebie 所说,git dir 路径中存在长度问题。但他没有说在哪里可以找到 gitdir 字符串:

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

于 2012-09-10T08:50:37.570 回答
2

您在子模块的错误 url 处做了。如果您检查您在命令 ( https:\\github.com\doctrine\DoctrineMongoORMModule) 中使用的 url,您会注意到您确实收到了 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

于 2012-04-26T15:18:53.883 回答
0

我遇到了同样的错误并修复了它,但我认为它与 superdweebie 所说的 Windows 路径长度限制无关。就像错误所说的那样,Unable to find current revision in submodule path并且The system cannot find the path specified。您必须手动编辑.git文件中正确的相对路径或使用绝对路径。

于 2013-09-20T07:23:48.087 回答