无法将Git子模块添加到仓库。

6

(主要是关于Git的问题,但可能与其他PyroCMS用户相关)

我有一个PyroCMS本地仓库-仓库是主项目的github分支的克隆。 我还有一个PyroCMS模块,它也是该项目的github分支的本地克隆。那个项目。

我将它们都放在单独的目录中。

~/Dropbox/websites/pyrocmscommunity-test/
~/Dropbox/github/PyroDatabase/

我希望将PyroDatabase作为pyrocmscommunity-test的子模块添加,这样我就可以从GitHub上拉取更新、跟踪自己的更改等。我尝试通过进入工作树的顶部并执行以下操作来实现这一点:
git submodule add ../../github/PyroDatabase/ addons/shared_addons/modules/

但它没有成功地完成:

Cloning into 'addons/shared_addons/modules/database'...
ssh_exchange_identification: Connection closed by remote host
fatal: The remote end hung up unexpectedly

我不明白这个,因为我没有指定SSH连接,我只是想使用本地代码库。它在尝试连接什么以及为什么要连接?

另外,现在,每当我重复该命令时,都会出现以下内容:

'addons/shared_addons/modules' already exists in the index

但是我不明白为什么没有.gitmodules文件,也没有在.gitconfig中提到模块文件。我做错了什么,应该如何重置呢?
谢谢, William

奇怪。对我来说可以工作。我还尝试克隆一个本地仓库,该仓库与其远程github仓库不同步,只是出于克隆本地可能会连接到其远程的微小机会...但这也起作用了。 - GoZoner
2个回答

15

当指定子模块位置的相对URL时,Git会相对于当前项目的origin URL(这里是Github)进行计算,而不是相对于文件系统中的项目位置。这是因为子模块是指向远程位置的永久指针。在这里,Git尝试使用两级上的origin github存储库进行联系,这是一个不正确的URL。

至于第二个错误,Git已经在您的索引的暂存区中创建了一个条目,并且它必须被删除(取消暂存)。

git rm -r addons/shared_addons/modules

然后使用克隆的绝对路径重试:

git submodule add $HOME/Dropbox/github/PyroDatabase/ addons/shared_addons/modules/

无论如何,将项目的本地克隆作为其子模块添加到自身中是不正常的,因为子模块是指包含项目的不同仓库。为什么不按照标准 Git 的方式跟踪本地和远程提交呢?


1
从git submodule add文档中阅读整个段落,为您的阅读加1分。 - djs
谢谢 - 现在我对它更清楚了。同时,在Git书中找到了子模块章节很有帮助。 - William Turrell

2
你运行的是哪个版本的git?由于你指定的目录结构已经被暂存,所以你可能无法再次运行该命令。你可以像这样重置它(请谨慎使用此命令):
$ git status # check what has been changed
$ git reset --hard HEAD # destroy all working copy changes

调试git时,一个非常有用的方法是设置GIT_TRACE=1。因此,在清理后,请尝试再次运行以下命令:

$ GIT_TRACE=1 git submodule add ../../github/PyroDatabase/ addons/shared_addons/modules/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接