【问题标题】:Bootstrapping projects with: private git repos, Composer and Satis引导项目:私有 git repos、Composer 和 Satis
【发布时间】:2014-02-14 04:21:46
【问题描述】:

编辑:我在这里尝试实现的目标可以通过Yeoman 项目来完成。


所以我在私人服务器上设置了git+composer+satis,一切正常,我真的很热衷。必须爱他们所有人。

我将 git 用于项目和私有包,所以现在基本工作流程如下所示:

git clone git@myserver:the-project-name
composer install

这将克隆项目 repo,并安装所需的依赖项。太棒了。

但我也希望能够使用一些“skeleton-repos”并将它们的内容复制到我的项目中,保留依赖信息。

举个例子:

  • 我创建了一个名为:test-project 的 git 存储库,然后将其克隆到本地。
  • 我有另一个 git 存储库,称为 fb-bootstrap,它是 facebook 应用程序的骨架。
  • 我还有另一个引导框架 git 存储库,我也想包含它:例如,这将是一个 api/ 文件夹。我们称之为:api-bootstrap
  • 所以我也想克隆它们,但我当然不能这样做,因为我已经在同一目录中有一个 git repo。
  • 一个可能的解决方案:我使用以下代码,所以我只获取文件:'git archive --format=tar --remote=git@myserver:the-bootstrap-repos HEAD | tar xf -'

这很好,但是它有一个问题:我有不同的依赖项 - 不同的 composer.json 文件。 - 对于 fb-bootstrap 和 api-bootstrap 存储库,所以我需要找到一种方法来安装它们。

请注意,我没有为此使用 composer,因为除了自动加载的 php 类之外,我无法将任何内容放入 vendor/ 文件夹中,因为访问权限仅限于该文件夹。

解除该限制也不能解决问题,因为如果我稍后添加依赖项并调用composer update,我可能会丢失我在引导文件夹中所做的更改。

由于上述原因,上面的子模块和唯一复制文件黑客并没有完全消除它。

总结:

我需要一个解决方案,我可以在其中包含尽可能多的引导存储库,并且在我完成它之后,我必须能够安装所有依赖项。

像这样:

  • git init 一个项目 repo,
  • git 将项目 repo 克隆到本地,
  • 获取我需要的几个引导存储库的内容,
  • 安装我为项目声明的依赖项,以及所有引导存储库的依赖项。

有没有办法做到这一点?

另外:如果您认为我以完全错误的方式处理此问题,请随时告诉我。无论如何,我正在适应新技术,我并不害怕变化。 :)

欢迎评论。

【问题讨论】:

  • 有什么理由不让 api-bootstrap 成为 Composer 库?
  • 是:“请注意,我不为此使用 composer,因为除了自动加载的 php 类之外,我无法将任何内容放入 vendor/ 文件夹中,因为访问权限仅限于该文件夹。解除这个限制也不能解决问题,因为如果我稍后添加一个依赖项,并且我调用 composer update,我可能会丢失我在引导文件夹中所做的更改。"
  • 对不起,我第一次阅读时不太明白。使用自定义安装程序在 vendor/ 以外的地方安装 api-bootstrap 怎么样?
  • 好吧,我可以使用 git 子模块,但这样我就被限制在一个子文件夹中。一些引导存储库需要在根文件夹中有文件。

标签: git composer-php yeoman satis skeleton-code


【解决方案1】:

与此同时,我或多或少地解决了这个问题。

首先,我放弃了完全自动化一切的想法。

组合不同的引导存储库存在太多问题;真的,任何事情都可能发生。

我仍然想自动化的一件事是合并引导存储库的不同依赖项。

所以在这些更改之后,我想出了一个非常简单的脚本,它的用法如下所示: (请注意,gitcopy 是我在 linux 环境中使用的脚本,它只复制存储库的内容。)

gitcopy git@server:bootstrap // Grabs the bootstrap.php file from a private repo.
php bootstrap.php fb-bootstrap api-bootstrap

第二个命令将创建一个新文件夹:'bootstrap',并将 repos 克隆到其中。 然后它会删除 .git 文件夹,因为我不需要那里的版本控制。 它还引导一个基本的 composer.json,并从其中的引导程序中合并所有其他 composer.json 文件。 bootstrap composer.json 文件在此过程中被删除,因此我可以将 bootstrap 内容复制到项目的根文件夹中,而不会提示覆盖其他 composer.json 文件。

所以基本上,它只是一个不错的小工具,可以获取我需要的一切,然后我可以自己处理可能出现的问题。

有了这个,我可以使用 Yeoman 生成器,并且仍然使用我自己的引导文件,而不必担心冲突。

我唯一无法研究的是如何使这个脚本成为 phar 可执行文件,这样它就可以像作曲家一样工作。 我可以直接说:bootstrap api webapp etc

但那是另一天。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 2011-04-29
    • 1970-01-01
    • 2015-03-19
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多