无法将 git 子模块添加到存储库



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

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

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

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

我想添加 PyroDatabase 作为 pyrocms-community 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中的模块文件。

我做错了什么,我该如何重置?

谢谢威廉

当为子模块位置指定相对 URL 时,Git 会将其相对于当前项目的origin(此处为 Github(URL 获取,而不是相对于文件系统上的项目位置。这是因为子模块是指向远程位置的永久指针。在这里,Git 尝试联系两个级别的原始 github 存储库,这是一个不正确的 URL。

至于第二个错误 Git 在索引的暂存区域中创建了一个条目,必须将其删除(未暂存(

git rm -r addons/shared_addons/modules

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

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

无论如何,将项目的本地克隆添加为自身的子模块很奇怪,因为子模块是包含项目的不同存储库。为什么不以标准 Git 方式跟踪本地和源提交?

你运行的是什么版本的 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/

最新更新