-1

我试图摆脱我的“未暂存的更改”,并且我的 Gemfile.lock 不断重新出现为未暂存的文件。我相信这是因为我更新了 bundler,因为更改是:

- 
- BUNDLED WITH
-    1.10.5

首先,这些不起作用,因为 Gemfile.lock 会自行更新:

git checkout -- Gemfile.lock

git stash save --keep-index --include-untracked
git stash drop

git reset HEAD

git clean -df
git checkout -- .

起作用的是:

git update-index --assume-unchanged Gemfile.lock

看起来不错,运行“git status”:

On branch develop
Your branch is up-to-date with 'origin/develop'.
nothing to commit, working directory clean

我无法运行“git checkout origin/existing_branch”

error: Your local changes to the following files would be overwritten by checkout:
    Gemfile.lock
Please, commit your changes or stash them before you can switch branches.

Gemfile.lock 的最佳实践是什么?如何在忽略远程的情况下从远程拉出新分支?

4

1 回答 1

8

不要添加Gemfile.lock到您的.gitignore!

这破坏了锁定文件的要点。

您的 Rails 应用程序由 描述Gemfile,它根据依赖项和软版本使用为您的应用程序安装的 gem 版本的松散描述。因为一些次要版本和依赖项升级可能会中断,所以锁定文件会使用特定版本来描述您的应用程序,并且 Git 引用到特定提交,以便您在部署到开发/测试/生产时可以实现应用程序的工作状态服务器和/或与您的同行共享存储库。

如果您确实忽略了锁定文件,则任何新用户或服务器只会将 gems 安装到 Gemfile 定义/限制的最新版本和依赖项。您将花费数小时试图找出“使您的应用程序在本地工作的最佳软件组合”,而锁定文件已经为您完成了这项工作。

更好的解决方案是停止使用bundle update,除非您要更新Gemfile. 您几乎应该总是使用bundle install锁定文件来工作 - 它永远不会被更改。这适用于分支和 git pulls。

但是,一旦您想为您的产品更新 gem 版本,您应该更新Gemfile、 run bundle update <gemname>,然后提交结果GemfileGemfile.lock

最后,如果你不小心运行了bundle update,现在你有一个更新的Gemfile.lock,你应该重置锁定文件并重新运行bundle install

于 2015-08-24T16:10:22.087 回答