Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github Bundler如何破译与某个Gem版本对应的提交?_Github_Gem_Version_Bundler_Rubyforge - Fatal编程技术网

Github Bundler如何破译与某个Gem版本对应的提交?

Github Bundler如何破译与某个Gem版本对应的提交?,github,gem,version,bundler,rubyforge,Github,Gem,Version,Bundler,Rubyforge,我一直在研究Bundler的页面和RubyGem的页面(以及其他帖子),但似乎没有弄明白这一点 在Gemfile中,您向Bundler指定要使用的Gem版本。这就是我所知道的全部事实……剩下的就是我在猜测幕后发生了什么 因此,看起来Bundler随后会访问RubyGems.org或其他一些源,以了解Gem的版本、依赖项和源文件的位置。这是我最大的假设 然后,最有可能的Bundler转到代码库,最有可能的是Github,以下载源代码。这就是我被困的地方。如果有人指定了1.0.0版本的verion,

我一直在研究Bundler的页面和RubyGem的页面(以及其他帖子),但似乎没有弄明白这一点

在Gemfile中,您向Bundler指定要使用的Gem版本。这就是我所知道的全部事实……剩下的就是我在猜测幕后发生了什么

因此,看起来Bundler随后会访问RubyGems.org或其他一些源,以了解Gem的版本、依赖项和源文件的位置。这是我最大的假设

然后,最有可能的Bundler转到代码库,最有可能的是Github,以下载源代码。这就是我被困的地方。如果有人指定了1.0.0版本的verion,Bundler如何知道哪个Git提交对应于1.0.0版本

-Bundler是否使用标签

-或者Bundler是否指向与版本号相同的分支的头部

-或者RubyForge中是否有指定的特定提交

-或者源代码的快照可以直接通过RubyForge获得

我想知道,如果我将Gem指定为1.0.0并进行捆绑安装。Bundle在1.0.0分支的头部进行提交(如果Bundler就是这样做的),那么如果该分支上有后续提交(但版本保持不变),这是否意味着我将拥有与在我之后打包(在分支上后续提交之后)的人不同的Gem版本

bundler将版本解析为特定的提交是有意义的,但是bundler如何选择提交呢?因为版本1.0.0可以跨多个提交存在


谢谢你抽出时间

当一个gem上传到RubyGems.org时,代码与gempec一起打包在一个.gem文件中(它本质上是一个类似于.zip或.tar.gz文件的归档文件)。然后,RubyGems.org将gempec解包并读取它以获取版本信息,等等

当您在Bundler中指定gem版本时,它会检查RubyGems.org以查看该版本是否可用。如果是这样,它直接从RubyGems.org下载.gem文件并将其解压缩,所有代码都在.gem文件中,因此无需从GitHub下载。如果您指定的版本在RubyGems.org上不存在,您将得到一个错误


Bundler从GitHub下载任何东西的唯一时间是指定
git
GitHub
而不是版本。在这种情况下,它将下载主分支中的最新提交(或Gemfile指定的任何分支),或者,如果Gemfile.lock存在,则下载Gemfile.lock中列出的任何提交。

@steveh512 Wow…我不知道.gem文件。这完全有道理。谢谢你提供的信息。