如何处理分叉的宝石和捆绑

时间:2015-06-17 15:03:25

标签: ruby-on-rails git github gem bundler

我已经分叉了一个宝石,它托管在Github上。

然后,在Gemfile中,这就是我所拥有的:

gem 'mongoid-scroll', git: 'https://github.com/bgvo/mongoid-scroll.git'

每当我使用Pry gem-opem命令更改gem时,更改都会保存在以下目录中:

/Users/borjagvo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/bundler/ruby/2.1.0/bundler/gems/

有些事让我困惑:

1)在此目录中,有两个mongoid-scroll个宝石(mongoid-scroll-7e23e72653c6mongoid-scroll-23bc60ce76bd)而不是一个宝石。我认为这个目录中的宝石是运行bundler时使用的宝石。 Bundler如何确定使用的是另一个而不是另一个?

2)如果我尝试将更改推送到Github回购:

Borjas-MacBook-Pro:mongoid-scroll-7e23e72653c6 borjagvo$ git push
Counting objects: 10, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (10/10), 1.00 KiB | 0 bytes/s, done.
Total 10 (delta 6), reused 0 (delta 0)
To /Users/borjagvo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/bundler/ruby/2.1.0/cache/bundler/git/mongoid-scroll-f814a84d6332ef5d28cf5db04da93b434e01f07b
   d8f9f91..696bdce  master -> master

我看到Github repo不是上传更改的地方。 执行git config --get remote.origin.url查看来源:

Borjas-MacBook-Pro:mongoid-scroll-7e23e72653c6 borjagvo$ git remote show origin
* remote origin
  Fetch URL: /Users/borjagvo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/bundler/ruby/2.1.0/cache/bundler/git/mongoid-scroll-    f814a84d6332ef5d28cf5db04da93b434e01f07b
  Push  URL: /Users/borjagvo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/bundler/ruby/2.1.0/cache/bundler/git/mongoid-scroll-    f814a84d6332ef5d28cf5db04da93b434e01f07b
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

将更改从捆绑器使用的gem上传到Github中的分叉存储库的好方法是什么(记住我正在使用Pry命令gem-open)。

感谢。

1 个答案:

答案 0 :(得分:1)

Gemfile.lock应该知道要加载什么gem,当你进行捆绑更新或安装新的gem时,Gemfile.lock也将使用新的gems,路径等进行更新。还有修订版哈希。

运行Fetch/Push URL时看到的git remote show origin末尾的哈希值必须与Gemfile.lock中的revision相同。

例如在我的Gemfile.lock中使用active-admin gem的情况下,我有:

GIT
  remote: git://github.com/gregbell/active_admin.git
  revision: b7e8c7dde2c26a47e5db0dd1efc163405afadd9d
  specs:
    activeadmin (1.0.0.pre)
    ...

即使我有2个主动管理宝石,也只有一个有修订:b7e8c7dde2c26a47e5db0dd1efc163405afadd9d

然而,使用分叉,这就是我所做的:

我通常fork它,pull我的计算机上的gem,更新我的应用的Gemfile以使用来自local-storage的gem {{1参数,并且每次我做一个小的改动只是为了测试它,我可以更新gem而不将它推送到github。

当我按需要使它工作时,我将它推送到github并更改我的应用程序的Gemfile中的路径,再次运行bundle来更新路径Gemfile.lock并且我已经完成了设置。至少在这里你不会混淆应用程序加载的宝石。

相关问题