具有确切版本的 Gemfile 与 Gemfile.lock

Gemfile with exact versions vs Gemfile.lock

Gemfile 中指定第三方库的确切版本与使用 Gemfile.lock 之间有什么区别吗?

如果我在 Gemfile 中使用确切的版本,它是否与分发 Gemfile.lock 相同?

不,完全指定的 Gemfile 和使用 Gemfile.lock 是不一样的。

您的 Gemfile 可能包括您在特定版本中使用的所有 gem。但是 Gemfile.lock 还将包含所有 gem,它们是您使用的 gem 的依赖项。这意味着当 Gemfile.

时,典型的 Gemfile.lock 将包含更多 gems

此外:您的 Gemfile 的 gem 或 gem 版本可能彼此不兼容。一个 Gemfile.lock 是由 bundler 生成的,代表一组 gem 相互兼容的版本。如果捆绑器无法满足所有必需的依赖项,那么它将不会生成 Gemfile.lock.

就是说:仅在 Gemfile 中固定由于应用程序的版本要求而需要固定的版本。让 bundler 找到一个有效的组合并将 Gemfile.lock 检查到版本控制系统中。

如果我将 Gemfile.lock 重命名为 Gemfile,bundle install 会因语法错误而失败。