Обновите только один драгоценный камень с упаковщиком

Я использую bundler для управления зависимостями в моем приложении rails, и у меня есть гем, размещенный в репозитории git, как указано ниже:

gem 'gem-name', :git => 'path/to/my/gem.git'

Чтобы обновить этот драгоценный камень, я выполняю bundle update но он также обновляет весь драгоценный камень, упомянутый в Gemfile. Так что же такое команда для обновления только одного конкретного драгоценного камня?

7 ответов

Решение

Здесь вы можете найти хорошее объяснение разницы между

Обновите гем и зависимости:

bundle update gem-name 

или же

Обновите исключительно драгоценный камень:

bundle update --source gem-name

наряду с некоторыми хорошими примерами возможных побочных эффектов.

Обновить

Как говорится в ответе @Tim, в Bundler 1.14 официально поддерживаемый способ это bundle update --conservative gem-name,

Способ сделать это - запустить следующую команду:

bundle update --source gem-name

Похоже, что с более новыми версиями bundler (>= 1.14) это:

bundle update --conservative gem-name

Вам просто нужно указать имя гема в командной строке:

bundle update gem-name

bundle update gem-name [--major|--patch|--minor]

Это также работает для зависимостей.

Я использовал bundle update --source Я долгое время, но есть сценарии, где это не работает. К счастью, есть драгоценный камень под названием bundler-patch которая имеет целью исправить этот недостаток.

Я также написал небольшой пост в блоге о том, как использовать bundler-patch и почему bundle update --source не работает последовательно. Кроме того, обязательно ознакомьтесь с постом chrismo, в котором подробно объясняется, что --source вариант делает.

Если вы хотите обновить отдельный гем до определенной версии:

  1. изменить версию гема в Gemfile
  2. bundle update
> ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
> gem -v
3.0.3
> bundle -v
Bundler version 2.1.4

bundler update --source gem-name обновит хеш ревизии в Gemfile.lock, который вы можете сравнить с последним хэшем коммита этой ветки git (master по умолчанию).

GIT remote: git@github.com:organization/repo-name.git revision: c810f4a29547b60ca8106b7a6b9a9532c392c954

можно найти на github.com/organization/repo-name/commits/c810f4a2 (Я использовал сокращенный 8-символьный хеш коммит для URL)

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