我注意到存在标记宝石版本发布的习惯。通过这种方式,我可以理解捆绑器会尝试签出特定的标签,并尝试构建特定的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"
现在如何使用正确的宝石版本?
答案 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。但是,因为标记不是提交的一部分,所以您不会在提交本身中看到标记操作。您只会看到标记引用该提交。