如何让Bundler忽略本地my_engine已检出的分支?
问题描述
我正在开发Rails应用my_app,同时开发该应用挂载的Rails引擎my_engine。Gemfile配置如下:
gem 'my_engine', git: 'https://my.repo/my_engine', branch: "development"
为了在开发时实时查看my_engine的修改,我通过以下命令让Bundler使用本地的my_engine副本:
$ bundle config set local.my_engine path/to/my_engine
这一设置效果很好,但存在一个问题:当我在my_engine中检出FEATURE-X分支开发新功能时,每次重启my_app,Bundler都会报错并停止运行:
Local override for my_engine at path/to/my_engine is using branch FEATURE-X but Gemfile specifies development
目前的解决办法是修改Gemfile中的分支为FEATURE-X(合并后再改回),或临时切换回development分支启动my_app后再切回FEATURE-X,操作繁琐。请问是否有办法让Bundler忽略本地已检出的分支?
解决方案
有两种实用方法可以解决这个分支检查问题:
方法一:关闭Bundler的本地分支检查
执行以下命令,全局关闭本地gem的分支差异检查:
bundle config set disable_local_branch_check true
如果只想让该配置仅对当前my_app项目生效,添加--local参数:
bundle config set --local disable_local_branch_check true
配置生效后,Bundler就不会再因为本地引擎分支与Gemfile指定分支不一致而报错。
方法二:针对开发环境调整Gemfile配置
在Gemfile中区分开发环境和其他环境的依赖配置,开发阶段直接使用本地路径的引擎,跳过远程仓库的分支限制:
group :development do gem 'my_engine', path: 'path/to/my_engine' end group :production, :test do gem 'my_engine', git: 'https://my.repo/my_engine', branch: "development" end
这种方式下,开发环境完全使用本地文件修改,无需依赖Bundler的本地覆盖配置,自然不会有分支冲突问题;生产和测试环境则保持使用指定分支的远程仓库。
内容的提问来源于stack exchange,提问作者SkyNT
相关产品推荐
相关产品推荐

