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

时间:2012-05-02 17:24:41

标签: git github git-submodules pyrocms

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

我有一个PyroCMS的本地存储库 - repo是主项目的github fork的克隆。我还有一个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中的模块文件。

我做错了什么以及如何重置?

谢谢, 威廉

2 个答案:

答案 0 :(得分:15)

为子模块位置指定相对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/

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

答案 1 :(得分: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/