2012-09-07 59 views
1

我注意到存在标记宝石版本发布的习惯。这样,我就可以理解bundler会尝试检出特定的标签,并尝试构建特定的gemspec。Bundler如何知道如何使用特定的宝石版本?

但是,我还发现了Sven Fuchs的gem-release宝石。我会期望凹凸命令为每个版本的宝石创建标签。但是,我看到的所有情况都是对version.rb文件的修改(未创建标签)。你能阐明到底发生了什么,当我说一些轻:

gem "some_gem","0.0.1" 

当我说会发生什么:

gem "some_gem","0.0.2" 

如何捆绑安装它们?如果不是上面的命令(假设我克隆宝石的回购),我写:

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

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

回答

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。但是,由于标记不是提交的一部分,因此您不会在提交本身中看到标记操作。您只会看到该标签引用了该提交。

+0

我有一个私人回购,我没有发布宝石Github或Rubygems。我为v0.0.1和v0.1.0创建了标签(第一次更新后)。如果我试图指定,通过: 'gem“my_gem”,“0.0.1”,:git =>“https:// my_bitbucket_repo/...” 我收到错误'找不到宝石'my_gem'(= 0.0.1)...源包含0.1.0'处的“my_gem”。我应该额外做些什么才能成功安装不同版本的gem? – Geo

+0

如果它是私人存储库,bundler将无法登录和访问它。你应该'git克隆https:// my_bitbucket_repo/...'到你的本地机器,然后使用'gem“my_gem”,“0.0.1”,:git =>“path_to_local_git_repository”' – ronalchn

+0

我将用户/地址中的密码。 'http:// my_user:[email protected] ...' – Geo

相关问题