{gem}在/ path/to/local/git/repo的本地覆盖使用分支开发,但Gemfile指定develop

let*_*nje 5 git gem ruby-on-rails bundler

我正在运行bundler v1.3.0.pre.2并试图让bundler将一个拥有gem的本地git存储库捆绑到rails应用程序中.

Gemfile:

gem 'mygem', :github => 'myrepo/mygem', :branch => 'develop'
Run Code Online (Sandbox Code Playgroud)

配置:

bundle config local.mygem /path/to/local/git/repo
Run Code Online (Sandbox Code Playgroud)

Bundle install抛出错误:

mygem在/ path/to/local/git/repo的本地覆盖是使用分支开发,但Gemfile指定develop

这是一个错误吗?我看到分支名称完全相同.可能有什么不对?对于Bundler v1.2.3也有同样的错误

fon*_*tno 10

您可以使用本地gem甚至是您正在处理的分支

gem 'rspec-rails', path: '~/forks/rspec-rails', branch: 'feature-branch'
Run Code Online (Sandbox Code Playgroud)

只需github改为path,然后

bundle install
Run Code Online (Sandbox Code Playgroud)

另外就捆绑器配置而言,虽然它在文档中,但我从来不需要像上面那样更改本地配置.

使用这种方法我永远不需要删除Gemfile.lock,它只是获取对本地仓库的更改.

虽然我不推荐它,但您可以禁用bundler使用的分支检查功能,以确保在开发时使用正确的分支

bundle config disable_local_branch_check true
Run Code Online (Sandbox Code Playgroud)


the*_*ore 7

如果您只需要在gemfile中指向本地存储库中的分支,就像gem一样:

gem 'gem-name', :path=> 'relative/path/to/directory'
Run Code Online (Sandbox Code Playgroud)

然后在bundle-ing 之前为该"gem"创建bundler配置

(请记住,存储库名称可能与gem的名称不同,尽管这不是常态).

bundle config local.repository-name relative/path/to/directory
Run Code Online (Sandbox Code Playgroud)


奇怪的是,当您启动本地服务器时,当前在本地检出的任何分支都将处于活动状态.如果需要进行更改或更改分支,则可能需要重新启动服务器(除非您具有某种类型的自动重新加载功能).

一个问题是当配置设置已经建立时(让我们说通过上面的机制),你需要使用/引用一个远程git gem - 你不需要捆绑器配置来使用远程git gem(如果你有一个活跃的配置,你会得到local override错误).

检查以确保您没有给定gem的本地设置:

bundle config local.gem-name
Run Code Online (Sandbox Code Playgroud)

如果这样做,请删除该gem的配置:

bundle config --delete local.gem-name
Run Code Online (Sandbox Code Playgroud)

然后在gemfile中指向远程repo和branch:

gem 'gem-name', :path => 'https://github.com/reponame.git', :branch => 'branch_name'
Run Code Online (Sandbox Code Playgroud)

更多信息:

Git Gems:http://bundler.io/v1.7/git.html

"bundle config":http://bundler.io/v1.7/man/bundle-config.1.html


rkb*_*rkb 2

GitHub 问题表明解决方法可能是删除Gemfile.lockbundle install重新执行。