使用提交的哈希安装 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的主要内容,如果未能解决你的问题,请参考以下文章

GIT 在特定提交之前获取提交哈希

从分支获取最新 Git 提交哈希的命令

sh 使用哈希重命名上次提交消息

在 Git 中,如何将当前提交哈希写入同一提交中的文件

列出 git 中 2 个提交哈希之间的提交

如何从 Github API 获取最新版本的提交哈希