Ruby on rails 如何处理分叉的宝石和包裹

Ruby on rails 如何处理分叉的宝石和包裹,ruby-on-rails,git,github,gem,bundler,Ruby On Rails,Git,Github,Gem,Bundler,我已经分叉了一个宝石,它是托管在 然后,在Gemfile中,我得到了: gem'mongoid scroll',git:'https://github.com/bgvo/mongoid-scroll.git“ 每当我使用Prygem opem命令对gem进行更改时,更改将保存在以下目录下: /Users/borjagvo/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/bundler/ruby/2.1.0/bundler/gems/ 有些事情让我困惑: 1)

我已经分叉了一个宝石,它是托管在

然后,在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
gems(
mongoid-scroll-7e23e72653c6
mongoid-scroll-23bc60ce76bd
)而不是一个。我认为这个目录中的gems就是运行bundler时使用的gems。bundler如何确定这是要使用的一个而不是另一个

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

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)
从bundler使用的gem(请记住,我使用的是Pry命令
gemopen
),将更改上传到Github中的forked repo的好方法是什么


谢谢。

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

运行
git remote show origin
时看到的
Fetch/Push URL
末尾的散列必须与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)
    ...
即使我有两个活动的管理宝石,也只有一个有修订版:
b7e8c7dde2c26a47e5db0dd1efc163405afadd9d

但是,使用forks时,我会这样做:

我通常使用
fork
it,
pull
gem在我的计算机上,用
path
参数更新我的应用程序的
Gemfile
以使用本地存储的gem,并且每次我做一个小的更改只是为了测试它,我可以更新gem而不必将它推到github


当我让它按照我的需要工作时,我将它推到github并更改我的应用程序的Gemfile中的路径,再次运行bundle以更新路径Gemfile.lock,我就一切就绪了。至少在这里,您不会对应用程序正在加载的宝石感到困惑。

谢谢!因此,我应该假设您可以指定绑定git回购以从中下载gem。但是,一旦它位于本地存储上,您就无法对其进行更改并直接推送到从中下载它的repo。对吗?如果您在本地存储上克隆gem,您将在默认情况下设置git,以便您可以直接推送到它被克隆的repo。。例如,您将克隆您的分叉回购协议,并且您只能推送到您的回购协议。但是,我不确定我是否正确理解了您的问题。我的问题是关于bundle是否自动完成了您描述的过程(现在我知道它没有)。但这可能是有道理的。