Gem / repositório privado remoto – subárvore git

Para dentro

Acredito que você veio aqui porque já decidiu porque gostaria de fazer um repositório separado. E não vou perder seu tempo com histórias ou prós / contras de como pode ser legal armazenar e compartilhar uma parte de um aplicativo em um local separado.


Problema:

Você tem um link para um repo privado Gemfilee tudo está funcionando bem até que o código não seja entregue aos servidores remotos (CI, Heroku, VPS, qualquer que seja)

gem 'private', git: 'https://link_to_private'

Com certeza, o servidor remoto não será capaz de baixar esta gema devido à privacidade e o processo de implantação / teste será interrompido.


Soluções:

Na verdade, o problema não afirma ser o mais recente e existem várias soluções bem conhecidas:

  • Use serviços como Gemfury (pode armazenar e compartilhar sua gema por url especial gerado com token)
  • Adicione um usuário separado em seu repositório com acesso somente leitura e use suas credenciais no url (você pode colar essas credenciais por meio de variáveis ​​ENV)
gem 'private', github: 'https://user:password@link_to_private

Mas, me sinto mais confortável com as mesclagens de subárvore git:

A ideia da mesclagem de subárvore é que você tenha dois projetos, e um dos projetos mapeie para um subdiretório do outro e vice-versa. Quando você especifica uma mesclagem de subárvore, Git é inteligente o suficiente para descobrir que uma é uma subárvore da outra e mesclar apropriadamente – é incrível.

Como adicionar um novo repositório como uma subárvore

git remote add -f private git@host:private/private.git

git merge
-s ours --no-commit private/master

# --prefix - the path for external project
git read
-tree --prefix=vendor/gems/private -u private/master

git commit
-m "Subtree merged in private"

E para obter as últimas alterações do repositório externo:

git pull -s subtree private master
git commit
-m "A new feature from private gem has been added"