Как использовать подмодули git для обмена кодом между приложениями Heroku? - PullRequest
2 голосов
/ 28 сентября 2010

У меня есть несколько приложений Rails 3, развернутых в Heroku, которым нужно поделиться некоторой бизнес-логикой.По-видимому, хотя поддержка Heroku Bundler довольно солидна, она пока не может получить доступ к частному репозиторию Github.Поэтому вместо этого я собираю пару гемов, встраиваю их в каждое приложение, проверяю их в git и добавляю их вместе с остальным моим кодом.

Это работает нормально, но каждый раз, когда я хочуизменить что-то в этих общих драгоценных камнях. Мне нужно перейти к каждому приложению, распаковать gem в нужный каталог, git add / git удалить все файлы, которые были изменены, и так далее, и это становится чем-то вроде боли.Я также могу захотеть настроить разные ветви моей бизнес-логики, и чтобы разные приложения следовали за разными ветвями, но я не знаю, как бы этого добиться, продавая.

Похоже, были изобретены подмодули gitдля такой ситуации, но в последний раз, когда я пробовал субмодули, я обнаружил, что они ужасно сбивают с толку.Полагаю, это то, что мне нужно сделать, но фрагмент кода, который Heroku приводит в качестве примера по этой ссылке, также довольно запутанный.

Итак, мои вопросы:

  1. субмодули, которые я хочу использовать здесь?
  2. Какой самый простой возможный рабочий процесс git мне нужен для того, чтобы сделать то, что я описываю?

Я не новичок вмерзавец, но я не совсем промежуточный, и я хочу начать с простого набора шагов, которые я могу использовать, чтобы учиться.Мне нужно было бы отслеживать локальный git-репозиторий из моего каталога vendor / gems, регулярно получать обновления из этого репозитория и делать это таким образом, чтобы Heroku / Bundler не выбрасывался, когда я пытался выдвинуть весьприложение к производству.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 28 сентября 2010

Возможно, команда apenwarr git поддерево полезна.Он предоставляет хорошую оболочку для Git-слияния поддерева функциональность.

Добавление нового поддерева:

git subtree add --prefix=vendor/gems/shiny remote-or-url-to-shiny-gem branch

Извлечение новых коммитов в поддерево:

git subtree pull --prefix=vendor/gems/shiny remote-or-url-to-shiny-gem branch

Вам также может понравиться опция --squash, если вы не хотите включать историю.

Вы также можете использовать git поддерево для извлечения локальных коммитов, которые изменяют поддерево так, чтобыих можно отправить в исходный репозиторий поддерева (подкоманды split и push ).

1 голос
/ 28 сентября 2010

Вы можете использовать технику git-subtree

http://progit.org/book/ch6-7.html

0 голосов
/ 28 апреля 2012

Что касается меня, git-subtree было недостаточно. Это потребовало слишком много доработок и копания, и в результате были некоторые досадные недостатки и он выглядел как повязка. Кстати, упомянутое git поддерево apenwarr в последний раз обновлялось два года назад (по состоянию на 12 апреля ...), и если выбрано поддерево git, то я рекомендую использовать helmo's fork (или тому подобное).

Я бы настоятельно рекомендовал использовать подмодули git. Конечно, у него есть некоторые недостатки, но большинство из них лучше обрабатываются в более поздней версии git, и вы можете добавить несколько hooks и сценариев , чтобы сделать его пригодным для новичков в git. Кроме того, он гораздо более широко используется.

Что касается Heroku, теперь поддерживается . Если вам нужны частные репозитории, создайте пользователя и используйте его учетные данные для этой цели и используйте этот формат для расположения репозитория: https://username:password@github.com/user/repo.git
Более того, для приложений Ruby вы можете сделать это поочередно с помощью опции Bundler: git.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...