2012-04-26 70 views
3

这是我做错了什么,或更广泛的错误?为什么递归子模块从github更新为DoctrineMongoORMModule失败?

如果我在一个空目录下执行以下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> 

任何意见或帮助,将不胜感激。 干杯。

+0

这可能是因为没有这个URL的git-repository?您从哪里获取存储库网址? – Fge 2012-04-26 10:03:53

+0

@FGE,这里是链接:[https://github.com/doctrine/DoctrineMongoODMModule](https://github.com/doctrine/DoctrineMongoODMModule) – superdweebie 2012-04-26 11:47:36

回答

4

好吧,所以我解决了这个问题。 Mingw32具有路径长度限制,这与窗口路径长度限制有关(请参阅msdn)。通过缩短gitdir路径克服了这个问题。我没有使用相对路径,而是将其更改为绝对路径,从gitdir字符串中提取../../../../../../../../../../以换取c:/xds/sds。这种缩短就足以让一切顺利。

+0

如果您现在使用作曲家进行安装,这不是问题。 – superdweebie 2012-06-14 21:49:36

+1

你是如何做到绝对路径的? – CharlesB 2012-07-30 14:00:39

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

+0

我在URL中输入了错误,但那不是错误我遇到了问题。我已经修复了上述问题中的网址,并在进一步调查中添加了更多信息。干杯。 – superdweebie 2012-04-26 22:36:41

2

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

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

0

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

+0

答案应该提到路径可以改变的方式。 – Joakim 2014-03-21 11:06:50