(主要是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
中的模块文件。
我做错了什么以及如何重置?
谢谢, 威廉
答案 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/