Git子模块与独立的工作树

4
我按照这个页面的教程简化了通过Git部署我的网站:http://toroid.org/ams/git-website-howto。到目前为止一切都很好,然而最近我开始使用Kohana并按照这个教程在Git中设置它:http://kohanaframework.org/3.1/guide/kohana/tutorials/git
我的问题是:当我推送到我的Web服务器时,没有任何子模块被部署。那么,我该如何将子模块拉到我的Web服务器的工作树中呢?
如果我运行
git --git-dir /srv/www/mysite.com/src/project.git --work-tree /srv/www/mysite.com/public_html submodule init

它说

fatal: working tree '/srv/www/mysite.com/public_html' already exists
Clone of 'git://github.com/kohana/auth.git' into submodule path 'modules/auth' failed`.

有人知道如何检出这些子模块吗?如果找不到方法,我就只能手动通过FTP上传它们,这并不理想。


https://dev59.com/JWs05IYBdhLWcg3wGuOd - Craig Francis
2个回答

1

您需要单独推送子模块。子模块是它们自己的存储库。

一个简单的尝试是

git sub-module for-each git push

(添加--recursive标志以使其真正发挥作用)

您需要自己查看是否符合您的要求。另外,请注意,每个子模块默认会将其推送到指定的上游(推送分支)

您还可以获取

在接收工作树中:

git submodule update

首先,您可能需要

git submodule init

我能不能在远程机器上不获取子模块?我的工作树已经有了一个.gitmodules文件。如果这是个愚蠢的问题,对不起。 - Dachande663
可以的,我更新一下回答(你的问题是关于推送的,所以我忽略了这个;我假设你是在推送到裸仓库)。 - sehe
1
我的错误在于没有表达清楚 :) 如果你看一下我的回答的第二部分,我正在尝试运行git submodule init,但同时也传递了git目录和工作树位置,因为我在其他地方被建议这样做,因为其他git说它不在一个仓库中。有任何想法是出了什么问题吗? - Dachande663
不是真的。我必须承认我什么也没读懂——如果我能如此直言不讳的话,这有点混乱。也许今晚我有更多时间可以再读一遍。 - sehe
希望我稍微让它更易读一些,如果你决定看一看的话。干杯。 - Dachande663

0

尝试进入子模块目录,然后执行 git push 命令。

确保在启用子模块时,在根项目文件夹中执行了 git submodule initgit submodule update 命令。


在我的本地仓库中,我已经执行了init + update,因此我拥有了子模块的副本。如果我执行git push,会出现错误提示You can't push to git://github.com/kohana/database.git,如果我指定远程名称,则会提示它似乎不是一个git仓库。 - Dachande663
你是如何在模块中设置子模块的?当你执行 'git status' 命令时,会看到什么? - Mauvis Ledford
第二个链接展示了我添加子模块(以及我的git仓库结构)所遵循的教程,而第一个链接则展示了我在服务器上设置git仓库的方式。git status显示一切干净无误,而git submodules则列出了我所有的模块(包括git-dir和work-tree参数)。 - Dachande663

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接