Ответ 1
Можете ли вы?
Да
Должны ли вы?
Абсолютно нет.
Почему?
- Изменение источника драгоценных камней очень затрудняет обновление до более новых версий драгоценного камня.
- Намного сложнее отладить проблему.
- Это приведет к тому, что ОГРОМНЫЕ головные боли начнутся вниз.
- Это затрудняет работу в среде совместной работы (у каждого разработчика есть правильный взломанный камень?)
- Это вызывает такие вопросы (например, где я должен взломать драгоценный камень?)
Решение
Есть несколько способов решить эту проблему:
Отправить патч
Если вы считаете, что это "изменение" принесет пользу всему сообществу, найдите исходный код (скорее всего, github), fork, примените патч, написать тесты и отправить запрос на pull. Если разработчик согласен с тем, что ваш патч жизнеспособен, он будет объединен в проект и выпущен со следующей версией драгоценного камня.
<Сильные > Преимущества- Вы помогаете сообществу
- У вас есть локальная копия драгоценного камня (так как вы его разветвляли) на вашей машине разработки.
- Вам нужно дождаться, когда разработчик примет ваш патч
- Это может быть довольно трудоемким.
Re-Gem
Если вы не думаете, что это то, от чего выиграло бы все сообщество, но вы все же хотите позволить своим другим разработчикам систематически использовать драгоценный камень, развить существующий камень, применить патч, переименовать драгоценный камень, и публиковать. в этом случае хорошей практикой является префикс вашего собственного драгоценного камня с оригинальным названием драгоценного камня. Например, если драгоценный камень был назван foo
, вы бы назвали ваш драгоценный камень foo-my-company
. Теперь вы можете выбрать с открытым исходным кодом этот драгоценный камень (push to rubygems) или направить его на частный сервер gem развития в вашей организации. Вы все равно должны указать оригинального автора драгоценных камней в своем re-gem!
- Не нужно ждать разработчика
- Центральная база кода
- Легко обмениваться
- Трудно обновить исходный камень
- Может быть громоздко поддерживать
Локальный Lib (обезьяна-патч)
Вы можете создать патч обезьяны внутри вашего приложения и переопределить любые методы или свойства, которые не соответствуют вашей текущей среде.
<Сильные > Преимущества- Быстрый и простой
- Легко разделяемый (через git - просто включите файл исправления в свое репо)
- Обновление драгоценного камня затруднено.
- Не понятно другим разработчикам, что вы модифицируете ядро Gem
- Сложнее отлаживать (это ошибка с камнем или патчем?)
Вилка и источник
Это мой рекомендуемый вариант. Почему я положил это последним - другие более распространены. В этом методе вы разыгрываете драгоценный камень из его исходного репозитория (возможно, на github), а затем отправляете свой драгоценный камень из своего репозитория git. Например, скажем, что драгоценный камень был назван foo
, вы бы разблокировали foo
до username/foo
в github. Примените исправления, изменения, whatevers. Затем в вашем Gemfile:
gem 'gem_name', :git => 'git://github.com/username/foo'
Это будет устанавливать и компилировать драгоценный камень из источника в вашем репо каждый раз, когда запускается команда bundle. Вы также можете указать конкретный тег и ветку (рекомендуется для стабильности).
<Сильные > Преимущества- Вы можете легко обновить восходящий поток (у вас есть fork-pull из восходящего потока, слияния, у вас есть все изменения)
- Управление версиями легко (используйте теги и ветки для различных версий)
- У каждого есть доступ к одному и тому же источнику драгоценных камней.
- Простота управления обновлениями
- Ваш "настраиваемый" код является общедоступным (хотя вы можете использовать собственный сервер git вместо github для решения этой проблемы)
Заключение
У каждого метода есть свои преимущества и недостатки (которые я попытался перечислить как можно лучше). В любом случае предложенный метод не представляет собой рекомендуемый метод решения этой проблемы.
Если у читателей есть комментарии о других преимуществах/недостатках, перечислите их, и я добавлю их к моему ответу.