使用提交的哈希安装 gem
Posted
技术标签:
【中文标题】使用提交的哈希安装 gem【英文标题】:Installing a gem using a commit's hash 【发布时间】:2020-04-14 03:22:00 【问题描述】:我真的很简单Gemfile
:
source 'https://rubygems.org'
gem 'stripe-ruby-mock',
github: 'mnin/stripe-ruby-mock',
require: 'stripe_mock',
ref: 'b6446fb5ae2b14b6703554cbea4ebd466e4f3c47'
当我运行 bundle
命令来安装这个 gem 时,我得到了这个错误:
root@6bcff6bf3997:/app# bundle
The git source `git://github.com/mnin/stripe-ruby-mock.git` uses the `git` protocol, which transmits data without encryption. Disable this warning with `bundle config git.allow_insecure true`, or switch to the `https` protocol to keep your data secure.
Fetching git://github.com/mnin/stripe-ruby-mock.git
fatal: Could not parse object 'b6446fb5ae2b14b6703554cbea4ebd466e4f3c47'.
Revision b6446fb5ae2b14b6703554cbea4ebd466e4f3c47 does not exist in the repository git://github.com/mnin/stripe-ruby-mock.git. Maybe you misspelled it?
但我可以使用此链接https://github.com/mnin/stripe-ruby-mock/commit/b6446fb5ae2b14b6703554cbea4ebd466e4f3c47 访问 Github 上的提交页面。
那么我怎样才能使用这个提交的哈希来创建 gem 呢?
【问题讨论】:
这能回答你的问题吗? How to install gem from GitHub source? 或 this 如果它被合并到主分支中,为什么需要那个特定的提交,如(拉取请求)(github.com/rebelidealist/stripe-ruby-mock/pull/623)中所示? @AlexanderSantos 我不太确定。我有一个测试项目。正是使用 gem 测试通过的这个提交。当我使用另一个修订版时 - 测试失败。这就是为什么 ????♂️ 我只是无法使用此修订版获得我想念的东西。我将此修订缓存在我的计算机上并且一切正常,但是当我在另一台计算机上运行bundle
时,Bundler 无法根据 Gemfile 获取 gem
标记它,并通过标记而不是提交来获取它
但是该提交已合并到主仓库中,所以您是否尝试仅使用 https://github.com/rebelidealist/stripe-ruby-mock
而不使用分支或提交?实际上尝试注释掉所有内容并只使用核心宝石?如果您可以让主存储库正常工作,那么使用 gem 的分支是不好的做法。我
【参考方案1】:
从任何分支或标签都无法访问该提交。因此,当您从 GitHub 克隆存储库(Bundler 在后台执行此操作)时,您的本地副本将不会有该提交。
因此,你不能使用它。
在 GitHub 上,你可以看到这个提交是不可访问的,因为它没有列出任何包含它的分支或标签:
将其与父提交进行比较,父提交列出可从主提交:
请注意,孤立的提交最终会被 Git 收集垃圾。 GitHub 虽然没有这样做,因为可能会引用特定的提交。
【讨论】:
您提供了解决问题的答案,但没有提供解决方案。【参考方案2】:如果可能,尽量不要使用分叉的 gem。但是,如果您需要锁定分叉版本,请确保您拥有该分叉。 fork 分叉的分支,将其合并到您自己的 repo 的主分支,然后在 gemfile 中使用该 repo。
【讨论】:
以上是关于使用提交的哈希安装 gem的主要内容,如果未能解决你的问题,请参考以下文章