Gemfile.lock always has changes not staged for commit

≡放荡痞女 提交于 2019-12-21 04:08:31

问题


I am running into this problem on a rails app I am working on. I was working on a feature branch and wanted to rebase from the most recent master. I ran the following commands:

$ git checkout master
$ git pull --rebase

If I try to checkout back to my feature branch I get the following error:

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

I have tried the following commands to resolve the Gemfile.lock back to aster with none of them being successful:

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

Every time I run a new git command I go back to the Gemfile.lock having changes not staged for commit.

Here are the following versions of libraries I am working with:

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

回答1:


There must be some process running in the background or some side-effect of executing the git commands in your shell that is modifying the Gemfile.lock.

I am not familiar with rvm's magic (although that sounds plausible); here are some other things to check:

  • In recent versions of Rails there is a "spring" background process that runs. Try running spring stop (or bin/spring stop or bundle exec spring stop) to gracefully terminate that process.
  • Likewise if you have any other Rails-related processes like rails server, guard, zeus, sidekiq, etc. running, try shutting those down.
  • You might be running a git pre-commit hook. Check the .git/hooks directory.
  • git might be an alias in your shell for another command. Run alias to see a list of shell aliases.
  • Your shell prompt might be executing code to do things like show the current git status and branch name in the prompt. This code would be executed after every shell command to redraw the prompt, and might have side-effects. Check your .bashrc or .bash_profile.



回答2:


There are times that running a rails command or other bundle exec command will silently update your Gemfile.lock. I am guessing you are doing that sometime in between your git commands. Or you have something weird installed that does that invisibly.

(Could rvm do this invisibly? I don't know. I think rvm does all kinds of odd stuff and don't use it.).

At any rate, the fact that this is happening is probably evidence of something else going on that isn't what you want -- are you sure the Gemfile and Gemfile.lock you are trying to commit together are actually compatible? Normally any time a Gemfile changes at all, it is wise to run bundle install to get a new Gemfile.lock. If you are trying to commit a Gemfile.lock which actually isn't compatible with the Gemfile... I am not sure why you would want to do that anyway, normally I want the Gemfile and Gemfile.lock in any given commit to be compatible.

To get a clue as to why something (mysterious) may be changing your Gemfile.lock, do a git diff on the Gemfile.lock to see how it's changed?



来源:https://stackoverflow.com/questions/29130044/gemfile-lock-always-has-changes-not-staged-for-commit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!