用捆绑器更新一个gem

我使用bundler来pipe理我的Rails应用程序中的依赖关系,并且我拥有一个包含在git存储库中的gem,如下所示:

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

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

在这里你可以find一个很好的解释之间的区别

更新gem和依赖关系:

 bundle update gem-name 

要么

更新gem:

 bundle update --source gem-name 

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

更新

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

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

 bundle update --source gem-name 

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

 bundle update gem-name 

看来,使用更新版本的bundler(> = 1.14),它是:

 bundle update --conservative gem-name 

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

我还写了一篇关于如何使用bundler-patch的简短博客文章 ,以及bundle update --source不一致的原因。 此外,请务必查看chrismo 的post ,详细解释--source选项的用途。

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

这也适用于依赖关系。

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

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

可以在github.com/organization/repo-name/commits/c810f4a2find(我使用简写字符提交哈希的url)