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 Gemfile
e 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"