(主要是 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/