为什么DoctrineMongoORMModule的github递归子模块更新失败? [英] Why does recursive submodule update from github fail for DoctrineMongoORMModule?
问题描述
如果我在空目录中执行以下git命令:
git init
git submodule add https://github.com/doctrine/DoctrineMongoODMModule \vendor\DoctrineMongoODMModule
git子模块更新--init --recursive
一切顺利,拉多个子模块,然后失败以下输出:
致命:不是git存储库:../../../../../ ../../../../../.git/modules/vendor/DoctrineMongoODMModule/modules/vendor/mongodb-odm/modules/lib/vendor/doctrine-mongodb/modules/lib/vendor/doctrine- common
无法找到子模块中的当前修订版本'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提示符尝试这样做,我遇到了问题: 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
系统找不到指定的路径。
看起来目录更改字符串太长,因为如果我将它分成两部分:
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>
任何建议或帮助将不胜感激。
干杯。
好吧,我解决了这个问题。 Mingw32具有路径长度限制,这与窗口路径长度限制有关(请参阅 MSDN )。通过缩短gitdir路径克服了这个问题。我没有使用相对路径,而是将其改为绝对路径,女巫礼貌 ../../../../../../../../。 ./../
从gitdir字符串中交换为 c:/ xds / sds
。这种缩短就足以让这一切都完成。
Is this something I am doing wrong, or a wider bug?
If I execute the following git commands in an empty directory:
git init
git submodule add https://github.com/doctrine/DoctrineMongoODMModule \vendor\DoctrineMongoODMModule
git submodule update --init --recursive
The all goes well, multiple submodules are pulled, and then it fails with the following output:
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'
I've done a bit more digging. The .git file in the submodule that is causing the problem has the following contents:
gitdir: ../../../../../../../../../../.git/modules/vendor/DoctrineMongoODMModule/modules/vendor/mongodb-odm/modules/lib/vendor/doctrine-mongodb/modules/lib/vendor/doctrine-common
I have checked that gitdir path, and it does exist. However, I am using a Windows XP machine and if I attempt this from the cmd prompt I have problems:
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.
It appears that the directory change string is too long, because if I split it into two parts it works:
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>
Any advice or help would be appreciated. Cheers.
Ok, so I worked out the problem. Mingw32 has a path length limit, which is related to the windows path length limit (see msdn). Problem was overcome by shortening the gitdir path. Rather than using a relative path, I've changed it to an absolute path, witch elimaties ../../../../../../../../../../
from the gitdir string in exchange for c:/xds/sds
. That shortening is just enought to make it all go.
这篇关于为什么DoctrineMongoORMModule的github递归子模块更新失败?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!