Я вроде новичок в упаковщике и файлах, которые он генерирует. У меня есть копия git-репозитория от GitHub, в которую многие люди вносят свой вклад, поэтому я с удивлением обнаружил, что упаковщик создал файл, которого не было в репо и которого нет в .gitignore
списке.
Поскольку я его разветвил, я знаю, что добавление его в репо ничего не нарушит для основного репо, но если я сделаю запрос на извлечение, это вызовет проблему?
Должны ли Gemfile.lock
быть включены в хранилище?
git
version-control
bundler
aarona
источник
источник
Ответы:
Предполагая, что вы не пишете rubygem, Gemfile.lock должен быть в вашем хранилище. Он используется в качестве снимка всех ваших драгоценных камней и их зависимостей. Таким образом, упаковщик не должен пересчитывать все зависимости гемов при каждом развертывании и т. Д.
Из комментария cowboycoded ниже:
Вот хорошая статья, объясняющая, что такое файл блокировки.
источник
Настоящая проблема возникает, когда вы работаете с приложением Rails с открытым исходным кодом, для которого требуется настраиваемый адаптер базы данных. Я разрабатываю ветку Rails 3 Fat Free CRM. Я предпочитаю postgres, но мы хотим, чтобы база данных по умолчанию была mysql2.
В этом случае
Gemfile.lock
все еще нужно зарегистрироваться с набором драгоценных камней по умолчанию, но мне нужно игнорировать изменения, которые я внес в него на своей машине. Для этого я запускаю:и повернуть вспять:
Также полезно включить что-то вроде следующего кода в ваш
Gemfile
. Это загрузит соответствующий гем адаптера базы данных, основанный на вашем database.yml.Я не могу сказать, является ли это признанной лучшей практикой или нет, но она хорошо работает для меня.
источник
У меня и моих коллег по работе разный Gemfile.lock, потому что мы используем разные платформы, Windows и Mac, а наш сервер - Linux.
Мы решили удалить Gemfile.lock в репозитории и создать Gemfile.lock.server в репозитории git, как и database.yml. Затем, прежде чем развернуть его на сервере, мы копируем Gemfile.lock.server в Gemfile.lock на сервере, используя функцию cap deploy
источник
Соглашаясь с r-dub, держите его под контролем исходного кода, но для меня реальная выгода заключается в следующем:
совместная работа в идентичных средах (без учета windohs и linux / mac). До Gemfile.lock следующий чувак, который установил проект, мог видеть все виды запутанных ошибок, обвиняя себя, но он был просто тем счастливчиком, который получил следующую версию супер-драгоценного камня, нарушив существующие зависимости.
Хуже того, это происходило на серверах, получая непроверенную версию, если не дисциплинировали и не устанавливали точную версию. Gemfile.lock делает это явно, и он явно скажет вам, что ваши версии отличаются.
Примечание: не забудьте группировать вещи, как: разработка и: тест
источник
Документы Bundler также решают этот вопрос:
ОРИГИНАЛ: http://gembundler.com/v1.3/rationale.html
РЕДАКТИРОВАТЬ: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html
Смотрите раздел «Проверка кода в контроле версий»:
источник
Нет Gemfile.lock означает:
-> Всегда проверяйте Gemfile.lock, заставляйте travis удалять его, если вы хотите быть более тщательным https://grosser.it/2015/08/14/check-in-your-gemfile-lock/
источник
Немного опоздал на вечеринку, но ответы все же заняли у меня время, и иностранные читатели поняли эту проблему. Итак, я хочу обобщить то, что я узнал о Gemfile.lock.
Когда вы создаете приложение Rails, вы используете определенные версии гемов на своем локальном компьютере. Если вы хотите избежать ошибок в производственном режиме и других ветвях, вы должны везде использовать этот один файл Gemfile.lock и указывать сборщику
bundle
для перестройки гемов каждый раз, когда он изменяется.Если
Gemfile.lock
на вашем компьютере произошли изменения, и Git не позволяет вамgit pull
, вы должны написать,git reset --hard
чтобы избежать изменения этого файла, и писатьgit pull
снова.источник