/ / Envie apenas parte de um repositório git para heroku - git, heroku

Empurre apenas parte de um repositório git para heroku - git, heroku

Eu tenho um código-fonte gerenciado pelo git que quero enviar para o Heroku. O código-fonte contém vários produtos diferentes, alguns dos quais terão sua própria instância do heroku. Então, algo assim:

src/
lib-files/
app1/
app2/
app3/
other-files/
package.json

Portanto, no heroku, tenho uma instância para app1 e app2. Ambos dependem de ./lib-files e package.json, mas não de app2 ou app3 ou outros arquivos.

Eu realmente não quero empurrar todo o gitrepositório contendo todos os arquivos para heroku para cada aplicativo. Em outras palavras, eu não quero que a instância app1 contenha o código para app2 ou app3 ou outros arquivos porque há muitos dados que ela não precisa e leva uma eternidade para copiá-los.

Eu resolvi isso criando novos repositórios git paracada aplicativo (um que contém apenas as coisas que o app1 precisa e outro para o app2, etc) e, em seguida, enviar esses repositórios individuais para o heroku. Isso funciona, mas parece um pouco hackeado porque tenho todos esses outros repositórios extras que preciso gerenciar. Além disso, se outros desenvolvedores quiserem fazer push para o heroku, preciso disponibilizar esses repositórios para eles, talvez verificando-os no git (parece bizarro).

O que é uma boa maneira de conseguir isso?


Atualizar:</ strong>

E se eu criasse os repositórios heroku para que eles apenascontinha o material apropriado para cada aplicativo, então apenas deixe o heroku ser o controle remoto principal para esses repositórios (em oposição ao github)? Eu ainda teria vários repositórios para lidar, mas pelo menos todos os desenvolvedores teriam um local padrão para cloná-los (o repositório de código-fonte estando no github e os repositórios de implantação do heroku no heroku). O que você acha disso?

Respostas:

5 para resposta № 1

A solução que eu escolheria é a ramificação. Você tem o branch master que contém todos os arquivos e, em seguida, um branch para cada aplicativo que contém apenas o que é necessário.

Por exemplo:

$ git init
$ git add .
$ git commit -m "Initial commit"
$ git checkout -b app1   # create a new branch for app1 derived from master
$ git rm what-you-dont-need-for-app1
$ git commit -m "Initial app1 commit"
$ git checkout master    # switch to master again
$ git checkout -b app2
$ # repeat same steps as for app1

Você também pode ter um exclusivo .gitignore-file em cada branch para dizer ao git o que você não quer cometer.


1 para resposta № 2

A maneira que acabei fazendo isso foi deixando o herokualojam os controles remotos primários para as versões dos aplicativos que são implantados lá. Enquanto isso, o principal repositório de código-fonte em que todos trabalham está no github. Suponha que o código seja assim:

src/
app1/
app2/
app3/
lib-files/
other-files/
package.json

Então eu tenho dois aplicativos heroku para app1 e app2. Eles contêm apenas o código necessário para cada aplicativo:

app1:

src/
app1/
lib-files/
other-files/
package.json

app2:

src/
app2/
lib-files/
other-files/
package.json

Quando você deseja trabalhar no código-fonte, clona a versão completa do github. Quando você deseja implantar no heroku, você clona um dos repositórios de aplicativos de lá.

Criei um script para implantar cada aplicativo que faz o seguinte:

  1. Clone o repositório git do heroku se ele ainda não existir na caixa local
  2. Copie apenas os arquivos necessários apenas para esse aplicativo do repositório de origem principal para o repositório heroku
  3. Confirme as mudanças
  4. Envie o repositório para heroku

Um problema que encontrei é que cada um dos meus aplicativostem seu próprio aplicativo Node.js e normalmente inicio cada um em meu ambiente de desenvolvimento indo para esse diretório e executando o comando node:

cd app1
node server.js

No entanto, isso não funciona bem assim emHeroku porque espera que os arquivos Procfile e package.json estejam no diretório mais externo do repositório git. Meu arquivo package.json já está localizado lá, mas tive que criar Procfiles separados para cada aplicativo e copiá-los, dependendo de qual estou implantando. Cada um deles se parece com isto por dentro:

web: node app1/app.js

De qualquer forma, essa configuração parece funcionar.


0 para resposta № 3

Eu tive exatamente o mesmo problema (como imaginei que muitosfazer) e escolher de forma diferente: eu tenho um repositório separado para cada aplicativo e um repositório para o código compartilhado. Eu compartilho o código entre os aplicativos localmente no disco e no Heroku via requirements.txt. Aqui está o meu tópico de SO:

Compartilhando código Python entre aplicativos Heroku