1

这听起来像是一个基本问题,但我在互联网上找不到任何答案。

所以我有一个 git ruby​​ 项目 database_models。这是一颗宝石。我想要 3 个其他项目来使用它。我已将对该项目的依赖项添加到这 3 个项目中,如下所示:

gem "database_models", :git => "path", :branch => master

现在,我想让develop这3个项目的一个分支使用developdatabase_models的分支,我希望master这3个项目的一个分支使用masterdatabase_models的分支,这样我的生产环境就稳定了,独立于我的开发环境。

我可以看到 4 个这样做的选项,我不喜欢其中任何一个:

  1. 将 database_models 部署到服务器,并使用路径而不是 git 更新这 3 个项目以引用 database_models

  2. Git 子模块

  3. 使用不同版本的 database_models gem(1.1、1.2、1.3...)。我可能需要我自己的 gem 服务器,对吧?

  4. 在 Gemfile 中编写一些代码,根据运行“捆绑安装”的环境选择正确的分支。

4

2 回答 2

1

使用不同版本的 database_models gem(1.1、1.2、1.3...)。我可能需要我自己的 gem 服务器,对吧?

我会这样做,只需让我的 Gemfile 通过标签选择正确的 gem。这是一个例子: git 'https://github.com/rails/rails.git', tag: 'v5.0.0'

因此,您可以在将自定义 gem 存储在 github 上时执行相同的操作(不需要 gem 服务器)。

以下是如何在 Git 中使用标签

这应该为您提供所需的灵活性。

于 2017-04-27T00:21:29.433 回答
1

通常你会使用带有本地路径的 Bundler。您的 Gemfile 使用 or 指向 Git 或 Github 存储gitgithub

gem 'spree', github: 'spree/spree', branch: 'master'

请注意,包括分支。如果你愿意,你可以让你的每个项目使用你的 gem 的不同分支。如果你愿意,你可以让你的每个项目使用你的 gem 的不同分支。您还可以根据环境使用组来部署不同版本的 gem:

group :development, :test
  gem 'spree', github: 'spree/spree', branch: 'bleedinedge'
end

group :staging, :production
  gem 'spree', github: 'spree/spree', branch: 'master'
end

只要您继续推送到 Github,上述内容就可以正常工作。但是由于本地配置,您可以在命令行上运行以下命令:

bundle config local.database_modules ~/Projects/gems/spree

这将为您的 . 添加一行~/.bundle/config,因此当您bundle在项目中运行时,它将从您的本地存储库中提取它。

于 2017-04-26T16:29:57.323 回答