首页 文章

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

提问于
浏览
5

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

Gemfile:

gem 'mygem', :github => 'myrepo/mygem', :branch => 'develop'

配置:

bundle config local.mygem /path/to/local/git/repo

Bundle install抛出错误:

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

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

4 回答

  • 10

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

    gem 'rspec-rails', path: '~/forks/rspec-rails', branch: 'feature-branch'
    

    只需将 github 更改为 path ,然后

    bundle install
    

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

    使用这种方法,我从来没有需要删除 Gemfile.lock ,它只是选择了对本地仓库的更改 .

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

    bundle config disable_local_branch_check true
    
  • 1

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

    gem 'gem-name', :path=> 'relative/path/to/directory'
    

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

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

    bundle config local.repository-name relative/path/to/directory
    

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

    一个问题是当配置设置已经 Build 时(让's say via the mechanism above), and you need to use/reference a remote git gem - you don'需要捆绑器配置来使用远程git gem(如果你有一个活动配置,你将得到 local override 错误) .

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

    bundle config local.gem-name
    

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

    bundle config --delete local.gem-name
    

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

    gem 'gem-name', :path => 'https://github.com/reponame.git', :branch => 'branch_name'
    

    更多信息:

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

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

  • 6

    您在Gemfile中引用的分支需要与在本地存储库中签出的分支相同 . 请注意,在本地存储库中提交后,您需要在主应用程序上运行bundle install,以便重建Gemfile.lock以包含新的版本哈希并提交它 . 我建议使用下面的gem,因为它可以为您自动执行此过程,也可以帮助其他方案 . 有关详细信息,请参阅gem页面 .

    https://github.com/EPI-USE-Labs/git-bundle

    Full detail of what happens:

    当您在gemfile中使用git存储库时,您可以使用bundle local overrides for development,它将在您的Gemfile.lock中存储修订哈希值 . 在 生产环境 时,这些精确的修订版哈希将在运行bundle install时检出 .

    Gemfile: gem 'example', git: 'https://github.com/your_name/example.git', branch: :master

    Bundle config shell command: bundle config local.example /path/to/local/git/repository

    Gemfile.lock (auto generated): GIT remote: https://github.com/your_name/example.git revision: b9270e61abb89e1ff77fb8cfacb463e4d04388ad branch: master

  • 0

    这个GitHub issue建议解决方法可能是删除 Gemfile.lock 并再次执行 bundle install .

相关问题