Bundler:在Gemfile中始终使用git分支的最新版本

14
我有一个包含私有 Git 仓库的 Gemfile,格式如下所示:
``` gem 'magic_beans', :git => "git@git.example.com:magic_beans.git", :branch => "super_beans" ```
当我执行 `bundle install` 命令时,Gemfile.lock 会锁定到特定的 SHA 版本。
我能否让 bundler 总是检查并使用最新的 SHA 提交和/或更新 Gemfile.lock? 注意,当我将更新推送到 `super_beans` 分支时,我没有修改 gem 版本。
理想情况下,每次运行 `bundle` 命令时它都会检查上游 git 仓库是否有分支的较新的 SHA 提交。
4个回答

24

这不是bundler的工作方式。 关键在于允许无缝版本管理依赖项。 (尤其是,你可以确切地知道任何时候部署的代码版本)。

如果想要最新版本,只需运行。

bundle update magic_beans

这与直接说出来的功能完全相同。

gem "rails"

我建议,如果您有一系列要更新的特定内容, 那么添加一个自定义的二进制文件(比如一个名为bundle_update的可执行文件)。

#!/usr/bin/env bash
bundle install
bundle update magic_beans

当你想要更新这些内容时,只需执行./bundle_update即可。


如果我改用 :path,而不是:gitbundle install每次都会快乐地使用最新的SHA。我将继续使用bundle update,但我认为这不一定是最理想的解决方案。毕竟,在我的Gemfile中,我没有限定到一个:revision,而是一个:branch。感谢您的建议! - pithyless
1
我知道这很老旧,但是设置:path总是会更新,因为它从目录加载,而不是从git存储库或远程gem加载。 :path非常适合在本地同时开发两个项目,但一旦开始协作,就会出现问题。 - Matthew Rudy

1

在搜索文档后,我终于找到了一种神奇的方法来做到这一点:

bundle update magic_beans --source magic_beans

这是只更新magic_beans gem,而不触及其他锁定的gems的方法。关于此的文档是:http://bundler.io/man/bundle-update.1.html


第一个 magic_beans 是不必要的。你可以直接使用 bundle update --source magic_beans - lukeasrodgers

1

您可以运行bundle update命令将所有或特定的gem更新到最新可用版本,如文档所述。

这样做有帮助吗?


1
我猜如果应用程序和 gem 存储库都属于您,且 gem 经历了许多小的更改,那么每次都在主应用程序上提交以指向最新提交记录可能会很痛苦。 - lulalala

0

删除 .gemlock 对我有用 :/


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