为什么DoctrineMongoORMModule的github递归子模块更新失败? [英] Why does recursive submodule update from github fail for DoctrineMongoORMModule?

查看:139
本文介绍了为什么DoctrineMongoORMModule的github递归子模块更新失败?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



如果我在空目录中执行以下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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆