我可以阻止 Bundler 将 RUBY VERSION 添加到 Gemfile.lock

Can I stop Bundler from adding RUBY VERSION to Gemfile.lock

每次我 运行 命令行上的任何 gem 命令,Bundler 都坚持触摸我的 Gemfile.lock 文件以添加此行:

RUBY VERSION
   ruby 2.2.2p95

我不想将其提交到我们的存储库,因为这意味着每个使用 Ruby 2.2.2 不同补丁级别的开发人员都将与我一起提交 war . (我已经对 BUNDLED_WITH 行的类似问题辞职了。)但是我无法部署,除非我 do 提交该行,因为我们的部署 运行s 通过 rake 任务和 运行ning 部署导致 Bundler 添加这个块,因此部署过程说,"WAIT! Your working tree is dirty! You might be deploying incomplete changes!!!!1!"(好吧,不是字面意思,但你明白了。)

我可以告诉 Bundler 将 RUBY VERSION(最好是 BUNDLED_WITH)留在 Gemfile.lock 之外,这样我们就不必跳这个可笑的舞步了吗?

(how to prevent bundler from adding platform info to Gemfile.lock好像是同一个问题,但是没有答案,natch。)

如果您正在使用某种版本控制,例如 Git,您可以将 Gemfile.lock 添加到您的 .gitignore 文件中。

这样,无论何时您推送新更改,您都不会推送您的 Gemfile.lock。特别是因为其他开发人员不需要它 - 一旦他们 运行 捆绑,捆绑将在完成时创建一个新的 Gemfile.lock。

我不这么认为,但也许没关系:

从 2.1.0 开始,Ruby 不再有给定版本的多个补丁级别版本。查看 How do version numbers work for MRI Ruby?

上已接受的答案

2.2.2p95 是唯一将发布的 2.2.2 补丁级别。 'p95' 只是意味着自 2.2.0 以来已经有 95 次提交。

由于您的整个团队无论如何都会使用 2.2.2,因此将它留在您的 Gemfile.lock 中应该不会造成问题。 (无论如何,只要每个人都将 Bundler 更新到执行此操作的版本。否则在添加和删除 ruby 版本时仍然会存在冲突。)

不,它不能被删除,至少在我写这篇文章时当前的 Bundler 版本是这样。

此块已添加 in the #to_lock method 个 Bundler::Definition。它包含的唯一条件是 if locked_ruby_versionlocked_ruby_version 是一种方法,return 是现有锁定文件 (Gemfile.lock) 或系统 [=22] 中定义的版本=] - Bundler 非常努力地避免让 locked_ruby_version return 一个虚假的值。