我可以阻止Bundler将RUBY版本添加到Gemfile.lock吗
每次我在命令行上运行任何gem命令时,Bundler都坚持触摸我的我可以阻止Bundler将RUBY版本添加到Gemfile.lock吗,ruby,bundler,Ruby,Bundler,每次我在命令行上运行任何gem命令时,Bundler都坚持触摸我的Gemfile.lock文件以添加此行: RUBY VERSION ruby 2.2.2p95 我不想把它提交给我们的存储库,因为这意味着每一个使用不同补丁级别Ruby 2.2.2的开发人员都将与我展开一场提交战。(我已经接受了与bundle_with行类似的问题。)但我不能部署,除非我提交该行,因为我们的部署通过一个rake任务运行,并运行deploy leads Bundler来添加这个块,因此部署过程说,“等等!你的
Gemfile.lock
文件以添加此行:
RUBY VERSION
ruby 2.2.2p95
我不想把它提交给我们的存储库,因为这意味着每一个使用不同补丁级别Ruby 2.2.2的开发人员都将与我展开一场提交战。(我已经接受了与bundle_with
行类似的问题。)但我不能部署,除非我提交该行,因为我们的部署通过一个rake任务运行,并运行deploy leads Bundler来添加这个块,因此部署过程说,“等等!你的工作树很脏!您可能正在部署未完成的更改!!!!1.“(好吧,不是字面意思,但你明白了。)
我能告诉Bundler把RUBY版本
(理想情况下,与
捆绑在一起)从Gemfile.lock
中退出,这样我们就不必跳这种荒谬的舞蹈了吗
(似乎是同一个问题,但没有答案,natch。)如果您使用的是某种版本控制,如Git,则可以将Gemfile.lock添加到.gitignore文件中
通过这种方式,任何时候你推进一个新的更改,你都不会推进你的Gemfile.lock。特别是因为其他开发人员不需要它——一旦他们运行bundle,bundle将在完成时创建一个新的Gemfile.lock。我不这么认为,但也许没关系: 从2.1.0开始,Ruby对于给定版本不再有多个补丁级别的版本。请参阅 2.2.2p95是2.2.2中唯一一个将发布的补丁级别。“p95”只是意味着自2.2.0以来已经有95次提交
由于您的整个团队都将使用2.2.2版本,因此将其保留在Gemfile.lock中不会造成任何问题。(只要每个人都将Bundler更新为执行此操作的版本。否则,在添加和删除ruby版本时仍会有冲突。)不,不能删除它,至少在版本中是这样的当我写这篇文章时,绑定器的电流
此块是Bundler::Definition中添加的。如果锁定了\u ruby\u版本,则它包装的唯一条件是
,而锁定的\u ruby\u版本
是一个返回现有锁定文件中定义的版本(Gemfile.lock
)的方法或者系统Ruby-Bundler非常努力地避免让locked\u Ruby\u version
返回错误的值。Gemfile.lock的全部目的是根据Gemfile中指定的要求锁定确切的依赖版本。如果您想要一个可复制的环境,提交Gemfile.lock是非常必要的从git存储库中删除de>Gemfile.lock
不是一个选项。事实上,我们确实希望团队中的所有开发人员都使用项目中所有gem的相同版本。但事实证明,我们无论如何都会遇到提交战,不是针对Ruby版本,而是针对Bundler添加和删除此块的不同版本。sigh@pjmorse我觉得很好d允许所有团队成员拥有相同的绑定器版本。如果需要锁定gem,为什么不锁定Bundler?@FranklinYu问得好。我认为,因为绑定器是开发人员工具,而不是应用程序的直接依赖项,所以锁定其版本不如锁定gem版本重要。(此外,如果您的团队正在处理多个应用程序,您需要在应用程序之间协调绑定器的锁定版本,这可能是一个拖累。您实际上是在向您的团队提交lockstep绑定器更新。)@pjmorse我实际上没有遇到多个应用程序的任何问题,因为旧Bundler可以完全解析新Bundler生成的Gemfile.lock
。它实际上没有锁定,而是通知其他团队成员Bundler的新版本。它不会强制任何人升级,只是告诉他们“您没有在团队中使用最新版本”。如果没有任何成员或机器加入团队,它将保持该版本。@pjmorse事实上,我看到了,但Bundler团队似乎并不后悔这个决定。通常情况下,我的团队宁愿不与gem开发人员对抗,让我们的生活更轻松。