如何处理分叉的 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-7e23e72653c6
和 mongoid-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 应用正在加载什么。
我分叉了一个 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-7e23e72653c6
和 mongoid-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 应用正在加载什么。