Bundler如何知道如何使用特定的宝石版本?

时间:2012-09-07 23:58:56

标签: ruby gem bundler

我注意到存在标记宝石版本发布的习惯。通过这种方式,我可以理解捆绑器会尝试签出特定的标签,并尝试构建特定的gemspec。

但是,我也发现了来自Sven Fuchs的gem-release宝石。我原以为bump命令会为每个gem版本创建标签。但是,我看到的所有内容都是对version.rb文件的修改(没有创建标记)。当我说:

时,你能否详细说明究竟会发生什么?
gem "some_gem","0.0.1"

当我说:

时会发生什么
gem "some_gem","0.0.2"

Bundler如何安装它们?如果不是上面的命令(假设我克隆了gem的repo),我写道:

gem "some_gem","0.0.3",:path => "~/some/path"

现在如何使用正确的宝石版本?

1 个答案:

答案 0 :(得分:1)

默认情况下,Bundler从http://rubygems.org/获取其宝石,而不是从Github获取宝石。当作者实际发布它们时,Rubygems具有实际发布的版本。

如果您告诉bundler从git地址安装,例如。使用:git => "git://github.com/svenfuchs/gem-release.git"或github与:github => "svenfuchs/gem-release",它实际上将从存储库中获取它。

如果未指定其他选项,则bundler将在默认分支(master)上获取最新提交(HEAD)。在这种情况下,bundler将版本视为提交哈希。同样,如果您指定:branch选项,它只使用不同的分支。

如果指定版本,则会找到与您请求的版本匹配的标记。您应该知道标记不是提交的一部分。 git存储库中的标记是指向提交的指针。您可以在https://github.com/svenfuchs/gem-release/tags浏览它们来找到所有标记。

您会注意到标记v0.4.1引用了提交哈希34f563bd294c2...,它链接到commit。但是,因为标记不是提交的一部分,所以您不会在提交本身中看到标记操作。您只会看到标记引用该提交。