Gemfile.lock始终具有未提交的更改

时间:2015-03-18 18:34:23

标签: ruby git bundler gemfile.lock

我在我正在处理的rails应用程序上遇到此问题。我正在开发一个功能分支,并希望从最新的主人那里重新定义。我运行了以下命令:

$ 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,其中的更改没有为commit提交。

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

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

2 个答案:

答案 0 :(得分:27)

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

我不熟悉rvm的魔法(虽然听起来似乎有道理);这里有一些其他要检查的事情:

  • 在最新版本的Rails中,有一个&#34; spring&#34;运行的后台进程。尝试运行spring stop(或bin/spring stopbundle exec spring stop)以优雅地终止该过程。
  • 同样,如果您有任何其他与Rails相关的进程,例如rails server,guard,zeus,sidekiq等正在运行,请尝试将其关闭。
  • 您可能正在运行git pre-commit挂钩。检查.git/hooks目录。
  • git可能是shell中别名的另一个命令。运行alias以查看shell别名列表。
  • 您的shell提示符可能正在执行代码,以便在提示符中显示当前git状态和分支名称。此代码将在每个shell命令之后执行以重绘提示,并且可能具有副作用。查看您的.bashrc.bash_profile

答案 1 :(得分:0)

有时运行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来看看它是如何改变的?