【问题标题】:Git submodules with separate work_tree具有单独 work_tree 的 Git 子模块
【发布时间】:2011-08-17 19:19:02
【问题描述】:

我按照此页面上的教程通过 Git 轻松部署我的网站:http://toroid.org/ams/git-website-howto。到目前为止一切正常,但是我最近开始使用 Kohana 并按照本教程在 Git 中进行设置:http://kohanaframework.org/3.1/guide/kohana/tutorials/git

我的问题是:当我推送到我的网络服务器时,没有部署任何子模块。那么,如何将子模块拉到我的网络服务器上的工作树中?

如果我跑了

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 上传,这并不理想。

【问题讨论】:

标签: git


【解决方案1】:

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

简单来说就是

git sub-module for-each git push

(_添加 --recursive 标志以使其真正适用于类固醇)

你必须自己寻找这是否是你想要的。另外,请注意每个子模块默认会推送到它指定的上游(推送分支)

你也可以抓取

在接收工作树内:

git submodule update

你可能需要的第一个

git submodule init

【讨论】:

  • 我不能获取远程机器上的子模块吗?在我的工作树中,已经有一个 .gitmodules 文件。对不起,如果这是一个愚蠢的问题。
  • 是的,你可以,更新答案(你的问题是关于推送的,所以我忽略了这一点;我假设你正在推送到裸存储库)
  • 我不清楚的错误 :) 如果您查看我的答案的第二部分,我正在尝试运行 git submodule init,但也像我一样传递 git dir 和工作树位置在其他地方建议,因为其他 git 说它不在回购中。知道那里出了什么问题吗?
  • 并非如此。我必须承认我什么都看不懂——如果我这么直率的话,那就有点乱了。也许我今晚有时间再读一遍
  • 如果您决定看一下,希望它更清晰一些。干杯。
【解决方案2】:

尝试 CD'ing 进入子模块目录并执行 git push

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

【讨论】:

  • 在我的本地仓库中,我已经完成了 init + update,所以我有一个子模块的副本。如果我执行 git push,我会报错 You can't push to git://github.com/kohana/database.git,如果我指定我的遥控器名称,它会说它似乎不是 git 存储库。
  • 你最初是如何在模块中设置子模块的?当您执行 git 'git status' 时,您会看到什么?
  • 第二个链接显示了我添加子模块(以及我的 git repo 结构)的教程,第一个链接显示了我如何在我的服务器上设置我的 git repo。 git status 说一切都很干净,git submodules 列出了我所有的模块(带有 git-dir 和 work-tree args)。
猜你喜欢
  • 2010-12-04
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 2015-01-10
  • 1970-01-01
  • 2014-11-27
  • 2011-05-09
相关资源
最近更新 更多