使用捆绑器仅更新一个 gem

问题描述 投票:0回答:9

我使用捆绑程序来管理 Rails 应用程序中的依赖项,并且我在 git 存储库中托管了一个 gem,如下所示:

gem 'gem-name', :git => 'path/to/my/gem.git'

要更新此 gem,我执行

bundle update
但它也会更新 Gemfile 中提到的所有 gem。那么只更新一个特定 gem 的命令是什么?

ruby rubygems bundler
9个回答
478
投票

在这里您可以找到关于之间差异的很好的解释

更新 gem 和依赖项:

bundle update gem-name 

独家更新gem:

bundle update --source gem-name

以及一些可能的副作用的好例子。

更新

正如 @Tim 的回答所说,从 Bundler 1.14 开始,官方支持的方法是使用

bundle update --conservative gem-name


199
投票

执行此操作的方法是运行以下命令:

bundle update --source gem-name

64
投票

看来,对于较新版本的捆绑程序(> = 1.14),它是:

bundle update --conservative gem-name

25
投票

您只需要在命令行中指定gem名称即可:

bundle update gem-name

8
投票

bundle update gem-name [--major|--patch|--minor]

这也适用于依赖项。


3
投票

我自己已经使用

bundle update --source
很长时间了,但在某些情况下它不起作用。幸运的是,有一个名为
bundler-patch
的 gem 旨在解决这个缺点。

我还写了一篇简短的 博客文章,介绍如何使用

bundler-patch
以及为什么
bundle update --source
不能一致工作。另外,请务必查看 chrismo 的 帖子,其中详细解释了
--source
选项的作用。


0
投票

bundler update --source gem-name
将更新 Gemfile.lock 中的修订哈希值,您可以将其与该 git 分支(默认为 master)的最后提交哈希值进行比较。


GIT
  remote: [email protected]:organization/repo-name.git
  revision: c810f4a29547b60ca8106b7a6b9a9532c392c954

可以在

github.com/organization/repo-name/commits/c810f4a2
找到(我使用速记 8 字符提交哈希值作为 url)


0
投票

如果您想将单个 gem 更新到特定版本:

  1. 更改 Gemfile 中 gem 的版本
  2. bundle update
> ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
> gem -v
3.0.3
> bundle -v
Bundler version 2.1.4

0
投票

如果

bundle update gem-name
没有任何反应,可能是由于具有全局配置
do not touch lock files
,您可以禁用此功能:
bundle config set frozen false

© www.soinside.com 2019 - 2024. All rights reserved.