Как управлять 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