如何处理分叉的 gems 和 bundle

How to deal with forked gems and bundle

我分叉了一个 gem,它托管在 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 gem(mongoid-scroll-7e23e72653c6mongoid-scroll-23bc60ce76bd)而不是一个。我认为这个目录中的 gems 是 运行 bundler 时使用的 gems。捆绑器如何确定这是要使用的一个而不是另一个?

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 存储库不是上传更改的地方。 正在执行 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)。

谢谢。

Gemfile.lock 应该知道要加载什么 gem,当您进行捆绑包更新或安装新的 gem 时,Gemfile.lock 也会使用新的 [=40] 进行更新=]s、路径等。还有修订散列。

您在 运行 git remote show origin 时看到的 Fetch/Push URL 末尾的散列必须与 Gemfile.lock 中的 revision 相同。

例如在我的例子中 active-admin gem 在 Gemfile.lock 我有:

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

即使我有 2 个 active-admin gems,也只有一个有修订版:b7e8c7dde2c26a47e5db0dd1efc163405afadd9d

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

我通常 fork 它,pull 在我的电脑上 gem,更新我的应用程序的 Gemfile 以使用来自本地的 gem -带有 path 参数的存储,我可以更新 gem 而无需每次我做一个小的更改来测试它时将它推到 github 。

当我让它按我需要工作时,我将它推送到 github 并更改我应用程序的 Gemfile 中的路径,运行 再次捆绑以更新路径 Gemfile.lock 和我都准备好了。至少在这里你不会混淆 gem 应用正在加载什么。