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

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

谢谢,威廉

4

2 回答 2

15

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

至于第二个错误Git has created an entry in the staging area in your index, and it must be remove (unstaged) with

git rm -r addons/shared_addons/modules

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

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

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

于 2012-05-02T22:58:24.670 回答
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/
于 2012-05-02T22:41:47.837 回答