2014-09-05 7 views
9

Ho una cartuccia PHP che funziona normalmente, tranne che non riesco a trovare un modo semplice per far sì che OpenShift spinga (in modo ricorsivo) i file per i miei sottomoduli git quando/dopo spinge i miei file core repo.Come posso distribuire automaticamente i sottomoduli del mio repository git su push?

Sembra che dovrebbe essere un caso d'uso molto semplice e comune. Sto trascurando qualcosa?

Probabilmente ho ssh nel mio server e li tiro manualmente, ma mi piacerebbe automatizzare completamente questo, in modo che se aggiorno il riferimento del sottomodulo nel mio repo queste modifiche si rifletteranno quando distribuisco.

risposta

7

Ok, mi prendo una pugnalata a questo per 50 punti extra;)

Ecco le passaggi che ho seguito:

1.) Creare l'applicazione php-5.3 su OpenShift su clone sul computer locale.
2.) Creare un repository git pubblico su github da utilizzare come sottomodulo.
3.) Aggiungi il repository github all'applicazione OpenShift usando i seguenti comandi, assicurati di utilizzare l'URL https invece di git @ url, o otterrai dei problemi di chiave privata quando OpenShift Online prova a eseguire il checkout del sottomodulo .

cd into your locally cloned openshift application directory 
git submodule add https://github.com/developercorey/somesubmodule.git ./directory_name 
git add . 
git commit -am "adding a submodule" 
git push 

Se non ci sono errori nel tuo git push, allora tutto dovrebbe funzionare correttamente. se vedete un errore come questo

remote: Host key verification failed. 
remote: fatal: Could not read from remote repository. 
remote: 
remote: Please make sure you have the correct access rights 
remote: and the repository exists. 

Ciò significa che è stato utilizzato il git @ URL al posto del URL HTTPS aggiungere la git modulo, o si sta tentando di accedere a un repository privato. Ora puoi eseguire l'ssh nell'applicazione utilizzando il comando rhc ssh e cd nella directory ~/app-root/runtime/repo e dovresti vedere la directory del tuo submodulo lì con i file da quel repository al suo interno.

Se ciò non funziona, per favore fatemi sapere qual è l'output della vostra spinta Git e andremo da lì.

+0

Sembra che la modifica degli URL dei submoduli in '.gitmodules' a' https: // ... 'da' git @ ... 'ha fatto il trucco. Grazie! –

6

Per un repository padre (che contiene i sottomoduli), è necessario solo premere il repository padre stesso: include lo gitlink (special entries in the index) che fa riferimento al SHA1 giusto per ciascun sottomodulo.

volta spinto, un post-ricezione gancio può innescare un:

git submodule update --init --recursive 

Questa sarebbe aggiornare ciascun modulo a destra SHA1.

Il post-ricezione gancio è nel genitore bare repo: /path/to/parent.git/hooks/post-receive con:

#! /bin/bash 
cd /path/to/non-bare/parent 
git --git-dir=/path/to/parent.git checkout 
git --git-dir=/path/to/parent.git submodule update --init --recursive 
+0

Puoi aggiungere come fare esattamente questo alla tua risposta? (aggiungi il gancio di post-ricezione, ovvero) –

+0

@MurraySmith Ho aggiornato la risposta. – VonC

+0

Siamo spiacenti, sono ancora confuso su come potrei applicarlo ai miei repository OpenShift; Temo di essere nuovo del concetto di repository bare e non so quali file modificare dove e come. Hai fatto questa correzione specificatamente con la configurazione di OpenShift o questo consiglio è generalmente applicabile? –

Problemi correlati