我可以阻止Bundler将RUBY VERSION添加到Gemfile.lock
每次我在命令行上运行任何gem命令时,Bundler都会坚持触摸我的Gemfile.lock
文件来添加这一行:
RUBY VERSION ruby 2.2.2p95
我不想将它提交到我们的存储库,因为这意味着使用不同补丁级别的Ruby 2.2.2的每个开发人员都将与我进行一次提交战争。 (我已经用BUNDLED_WITH
行解决了类似的问题。)但是除非我确实提交了该行,否则我无法部署,因为我们的部署通过rake任务运行并运行部署引导Bundler来添加此块,于是部署过程说, “等待!你的工作树很脏!你可能正在部署不完整的更改!!!! 1!” (好吧,不是字面意思,但你明白了。)
我可以告诉Bundler将RUBY VERSION
(以及理想情况下, BUNDLED_WITH
)从Gemfile.lock
这样我们就不必做这种荒谬的舞蹈吗?
( 如何防止Bundler向Gemfile.lock添加平台信息似乎是同一个问题,但是没有答案,natch。)
我不这么认为,但也许没关系:
从2.1.0开始, Ruby不再具有针对给定版本的多个补丁级别版本。 请参阅接受的答案关于版本号如何适用于MRI Ruby?
2.2.2p95是2.2.2中唯一将发布的补丁级别。 ‘p95’仅表示自2.2.0以来已有95次提交。
因为你的整个团队无论如何都会在2.2.2上,所以不应该在你的Gemfile.lock中留下问题。 (只要每个人都将Bundler更新为执行此操作的版本。否则,添加和删除ruby版本时仍会存在冲突。)
不,它不能被删除,至少在Bundler当前的版本中我写这个。
该块添加在 Bundler :: Definition 的#to_lock
方法中。 它包含的唯一条件是if locked_ruby_version
,而locked_ruby_version
是一个方法,它返回现有锁文件( Gemfile.lock
)中定义的版本或系统Ruby – Bundler非常努力地避免让locked_ruby_version
返回一个假值。
如果您使用某种版本控制(如Git),可以将Gemfile.lock添加到.gitignore文件中。
这样,无论何时推送新的更改,都不会推高你的Gemfile.lock。 特别是因为其他开发人员不需要它 – 一旦他们运行bundle,bundle将在完成时创建一个新的Gemfile.lock。