Как управлять Gemfile.lock с помощью git в rails

Я пытаюсь избавиться от своих "Изменений, не подготовленных для фиксации", и мой Gemfile.lock продолжает появляться в виде файла без изменений. Я считаю, что это потому, что я обновил пакет, потому что изменения:

- 
- 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/ существующие_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? Как я могу получить новые ветви с пульта, игнорируя его?

1 ответ

Решение

Не добавлять Gemfile.lock на ваш .gitignore !

Это разрушает точку файла блокировки.

Ваше приложение Rails описывается Gemfile, который использует свободное описание версий гемов, установленных для вашего приложения, на основе зависимостей и программных версий. Поскольку некоторые второстепенные обновления версий и зависимостей могут быть повреждены, файл блокировки содержит описание вашего приложения с определенными версиями, а Git ссылается на конкретный коммит, чтобы вы могли достичь рабочего состояния своего приложения при развертывании в dev / testing / production серверы и / или поделиться репо с вашими коллегами.

Если вы проигнорируете файл блокировки, любой новый пользователь или сервер просто установит гемы на последние версии и зависимости, определенные / ограниченные Gemfile. Вы потратите часы, пытаясь выяснить "лучшее сочетание программного обеспечения, которое заставляет ваше приложение работать локально", когда файл блокировки уже сделал бы это для вас.

Лучшее решение - прекратить использование bundle update если вы не хотите обновить драгоценный камень внутри вашего Gemfile, Вы должны почти всегда использовать bundle install отработать файл блокировки - и он никогда не изменится. Это работает между ветками и мерзавцами.

Однако, как только вы захотите обновить версию гема для вашего продукта, вы должны обновить Gemfile, бежать bundle update <gemname>, а затем зафиксировать полученный Gemfile а также Gemfile.lock

Наконец, если вы случайно побежали bundle update и теперь у вас есть обновленный Gemfile.lock, вы должны просто сбросить файл блокировки и перезапустить bundle install

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