ChatGPT解决这个技术问题 Extra ChatGPT

使用 bundler 只更新一个 gem

我使用 bundler 来管理我的 rails 应用程序中的依赖项,并且我在 git 存储库中托管了一个 gem,包括如下:

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

为了更新这个 gem,我执行了 bundle update,但它也更新了 Gemfile 中提到的所有 gem。那么只更新一个特定 gem 的命令是什么?


a
anothermh

Here 你可以找到一个很好的解释

更新 gem 和依赖项:

bundle update gem-name 

或者

专门更新 gem:

bundle update --source gem-name

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

更新

正如@Tim 的回答所说,从 Bundler 1.14 开始,官方支持的方法是使用 bundle update --conservative gem-name


请注意,“更新 gem 和依赖项”意味着更新 rails 本身,如果它是依赖项并且您可能不希望这样做。 --source 只会更新指定为参数的 gem。所以在大多数情况下它会更好。
如何指定版本?
@OshanWisumperuma 在运行这些捆绑命令之前在 Gemfile 或可能的 Gemfile.lock 中指定版本
d
dukz

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

bundle update --source gem-name

这正是我所需要的,我有一个私有 gem,只需要在对私有 gem 进行一些更改后更新 gem 本身而不更新依赖项。
T
Tim

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

bundle update --conservative gem-name

注意:此命令将更新一个不依赖它的 gem
B
Brandan

您只需要在命令行上指定 gem 名称:

bundle update gem-name

奇怪的。这就是 bundle help update 所说的。您使用的是哪个版本的捆绑程序?
bundle update gem-name 将更新 gem 和“它的任何依赖项”。
L
Linus

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

这也适用于依赖项。


有没有办法将其更新到特定版本? --major--minor--patch 标志会自动将其升级到可能的最新版本。
您可以在 Gemfile 中指定特定版本,即 'xyz' 而不是 '~> xyz'
C
Christoph Lupprich

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

我还写了一篇简短的 blog post,介绍了如何使用 bundler-patch 以及为什么 bundle update --source 不能始终如一地工作。此外,请务必查看 chrismo 的 a post,其中详细解释了 --source 选项的作用。


s
shushugah

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

GIT remote: git@github.com:organization/repo-name.git revision: c810f4a29547b60ca8106b7a6b9a9532c392c954

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


s
spyle

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

在 Gemfile 包更新中更改 gem 的版本

> 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