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 с изменениями, не подготовленными для фиксации.

Вот следующие версии библиотек, с которыми я работаю:

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

2 ответа

Должен быть какой-то процесс, работающий в фоновом режиме, или побочный эффект от выполнения команд git в вашей оболочке, которые изменяют Gemfile.lock.

Я не знаком с магией RVM (хотя это звучит правдоподобно); Вот еще несколько вещей, чтобы проверить:

  • В последних версиях Rails существует "весенний" фоновый процесс, который запускается. Попробуйте запустить spring stop (или же bin/spring stop или же bundle exec spring stopизящно прекратить этот процесс.
  • Аналогично, если у вас запущены другие связанные с Rails процессы, такие как rails-сервер, guard, zeus, sidekiq и т. Д., Попробуйте выключить их.
  • Возможно, вы используете git pre-commit hook. Проверить .git/hooks каталог.
  • git может быть псевдонимом в вашей оболочке для другой команды. Бежать alias чтобы увидеть список псевдонимов оболочки.
  • Возможно, ваша командная строка выполняет код для показа текущего состояния git и имени ветки в приглашении. Этот код будет выполняться после каждой команды оболочки, чтобы перерисовать приглашение, и может иметь побочные эффекты. Проверьте свои .bashrc или же .bash_profile,

Временами выполнение команды rails или другой команды bundle exec автоматически обновляет ваш Gemfile.lock. Я предполагаю, что вы делаете это когда-то между вашими командами git. Или у вас установлено что-то странное, что делает это незаметно.

(Может ли rvm сделать это незаметно? Я не знаю. Я думаю, что rvm делает всякие странные вещи и не использует их.).

Во всяком случае, тот факт, что это происходит, вероятно, свидетельствует о том, что происходит что-то еще, а не то, что вы хотите - вы уверены, что Gemfile и Gemfile.lock, которые вы пытаетесь зафиксировать вместе, действительно совместимы? Обычно каждый раз, когда Gemfile изменяется, имеет смысл запустить bundle install, чтобы получить новый Gemfile.lock. Если вы пытаетесь зафиксировать Gemfile.lock, который на самом деле не совместим с Gemfile... Я не уверен, почему вы все равно захотите сделать это, обычно я хочу, чтобы Gemfile и Gemfile.lock в любом данном коммите были совместимы.

Чтобы понять, почему что-то (загадочное) может изменить ваш Gemfile.lock, выполните git diff на Gemfile.lock, чтобы увидеть, как оно изменилось?

Другие вопросы по тегам