【问题标题】:Gemfile.lock always has changes not staged for commitGemfile.lock 始终具有未暂存以进行提交的更改
【发布时间】:2015-05-21 17:00:32
【问题描述】:

我在正在开发的 Rails 应用程序上遇到了这个问题。我正在开发一个功能分支,并想从最近的 master 中重新定位。我运行了以下命令:

$ git checkout master
$ git pull --rebase

如果我尝试结帐回我的功能分支,我会收到以下错误:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

  modified:   Gemfile.lock

我已尝试使用以下命令将 Gemfile.lock 解析回 aster,但均未成功:

$ git checkout -- Gemfile.lock
$ git stash
$ git reset HEAD --hard

每次我运行一个新的 git 命令时,我都会返回 Gemfile.lock,其中的更改未暂存以进行提交。

以下是我正在使用的库的以下版本:

$ git --version => 2.3.3
$ bundler --version => 1.7.9

【问题讨论】:

  • 有哪些变化?有什么重要的吗?
  • 请再次运行 gem install bundler 升级 Bundler。 Bundler 1.7.9 有一些错误,在某些情况下可能会导致对Gemfile.lock 的意外更改。这些已在更新的版本中得到修复。至于只运行 git 命令时导致这种情况的原因,我认为 Matt Brictson 的答案是最好的。

标签: ruby git bundler gemfile.lock


【解决方案1】:

有时运行 rails 命令或其他 bundle exec 命令会静默更新您的 Gemfile.lock。我猜你在你的 git 命令之间的某个时候这样做。或者你安装了一些奇怪的东西,它会无形地做到这一点。

(rvm 可以无形地做到这一点吗?我不知道。我认为 rvm 会做各种奇怪的事情并且不使用它。)。

无论如何,发生这种情况的事实可能表明正在发生的其他事情不是您想要的——您确定您尝试一起提交的 Gemfile 和 Gemfile.lock 实际上是兼容的吗?通常,只要 Gemfile 发生变化,明智的做法是运行 bundle install 来获取新的 Gemfile.lock。如果您尝试提交实际上与 Gemfile 不兼容的 Gemfile.lock ...我不确定您为什么要这样做,通常我希望任何给定提交中的 Gemfile 和 Gemfile.lock兼容的。

要了解为什么某些东西(神秘的)可能会更改您的 Gemfile.lock,请对 Gemfile.lock 执行 git diff 以查看它是如何更改的?

【讨论】:

    【解决方案2】:

    一定有某个进程在后台运行,或者在你的 shell 中执行 git 命令的一些副作用正在修改 Gemfile.lock。

    我不熟悉 rvm 的魔法(虽然这听起来很合理);以下是一些其他需要检查的事项:

    • 在最近的 Rails 版本中,有一个运行的“spring”后台进程。尝试运行 spring stop(或 bin/spring stopbundle exec spring stop)以正常终止该进程。
    • 同样,如果您有任何其他 Rails 相关进程(如 rails server、guard、zeus、sidekiq 等)正在运行,请尝试关闭这些进程。
    • 您可能正在运行 git 预提交挂钩。检查.git/hooks 目录。
    • git 可能是您的 shell 中另一个命令的别名。运行 alias 以查看 shell 别名列表。
    • 您的 shell 提示符可能正在执行代码来执行诸如在提示符中显示当前 git 状态和分支名称之类的事情。此代码将在每个 shell 命令之后执行以重绘提示,并且可能会产生副作用。检查您的.bashrc.bash_profile

    【讨论】:

    • 谢谢,对我来说问题出在 spring 上。在spring stop 之后,我能够成功git checkout -- Gemfile.lock
    • 是的。我们在一个新的 Rails 4.2 项目中遇到了同样的问题,那就是 Spring。太有帮助了!
    • 在运行spring stop 之后我应该运行spring start 吗?
    • @BrunoPeres 不,spring 会在你下次运行启用 spring 的命令时自动重新启动,例如 railsrake
    猜你喜欢
    • 2023-01-08
    • 2020-12-15
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2018-11-22
    相关资源
    最近更新 更多