2010-03-30 6 views
7

Sono nuovo nel mondo di Git, GitHub e Heroku. Finora, mi sto godendo questo paradigma, ma venendo da uno sfondo con SVN, le cose mi sembrano un po 'complicate nel mondo di Git. Sto affrontando un problema per il quale sto cercando una soluzione.Git + GitHub + Heroku

Scenario:

1. Ho installato un nuovo progetto privato su GitHub. Ho biforcuta il progetto privato e ora ho la seguente struttura nel mio ramo:

/project 
     /apps 
     /my-apps 
      /my-app-1 
      .... 
      /my-app-2 
      .... 
      /your-apps 
      /your-app-1 
       .... 
      /your-app-2 
       .... 
     /plugins 
     .... 

posso commettere il codice nel mio Forcella su GitHub dalla mia macchina in una qualsiasi delle cartelle che voglio. Successivamente, questi verranno inseriti nel master repository dall'amministratore del progetto.

2. Per ogni singola applicazione nella cartella app, ho installato un'app su Heroku che è un Git Repo di per sé dove applico le mie modifiche quando ho finito con le storie degli utenti dal mio computer locale. In breve, ogni app nella cartella App è un'applicazione Rails ospitata su Heroku.

Problema:

Quello che voglio è che quando spingo i miei cambiamenti in Heroku, essi possono essere commessi nel mio progetto forchetta su GitHub e, quindi, ha anche il codice più recente per tutto il tempo.

Il problema che vedo è che il codice su Heroku è un Git Repo mentre le cartelle che ho su GitHub fanno parte di un Repo.

Finora, quello che ho cercato è che c'è qualcosa di conosciuto come Submodule nel Git World che può venire in soccorso, tuttavia, non sono stato in grado di trovare alcune istruzioni per principianti.

Qualcuno della comunità può essere così gentile da condividere pensieri e aiutarmi a identificare la soluzione di questo problema?

risposta

9

L'idea alla base dei sottomoduli è che sono tutti repository di git separati che è possibile includere in uno master e piuttosto che includere tutti i file che include un collegamento a tale sottomodulo.

Come usare sottomoduli

Per utilizzare un modulo, prima è necessario estrarre la directory e creare come un proprio repository git utilizzando git init. Quindi puoi caricarlo separatamente su Github o [luogo di tua scelta] e usarlo come sottomodulo usa il comando: git submodule add [place/to/put/it] git://github.com/you/proj1.

separazione è migliore

penserei meglio lasciare questi separati come i propri repository git e spingere a heroku da ciascuno. La ragione? È più probabile (credo) che lavorerai su uno alla volta e eseguirai uno git commit e uno git push heroku master solo per quello.

Se si volesse invece di distribuire tutte le applicazioni allo stesso tempo si potrebbe ricorsivi l'albero di directory utilizzando questo script Rubino collocato nella directory di livello superiore:

Dir["**/*"].select { |dir| File.directory?(dir) }.each do |f| 
    Dir.chdir(dir) do 
    `git push origin master` 
    `git push heroku master` 
    end 
end 

Naturalmente questo funzionerebbe solo se si hai messo in scena tutte le tue modifiche.Non riesco a pensare ad un modo per automatizzarlo visto che Ruby < = 1.9 non ha il modulo per leggere le tue opinioni.

+0

Grazie per la risposta, Ryan. Come hai detto, i sottomoduli devono essere creati, tuttavia, voglio sapere se ogni sottomodulo deve essere ospitato separatamente su GitHub o può risiedere nel repository del progetto. –

+1

Ospitali separatamente sarebbe il modo migliore. –

+1

Fondamentalmente, non vogliamo ospitare questi separatamente, il motivo principale è che i repository non sono pubblici e quindi non vogliamo condividerli con tutti. Inoltre, l'hosting di repository privati ​​su GitHub costa denaro. –