2010-03-08 13 views
10

Ecco cosa sto cercando di fare:Estrarre automaticamente il server remoto con Git push?

Ho un repository GitHub, una parte della quale mi piacerebbe rendere visibile il web. In questo momento ho clonato il repository sul mio server e funziona bene, ma per mantenerlo aggiornato, devo accedere manualmente e tirare le ultime modifiche.

Non sono sicuro se questa sia l'idea migliore (o l'approccio migliore), ma mi piacerebbe che il server remoto tirasse automaticamente ogni volta che qualcuno invia al repository. GitHub rende abbastanza facile eseguire una sceneggiatura quando qualcuno spinge, ma non sono sicuro di come tirare una volta che qualcuno lo fa.

Stavo usando PHP per semplicità, ma semplicemente fare qualcosa come git pull naturalmente non funziona a causa delle autorizzazioni. È una cattiva idea o esiste un altro modo per ottenere ciò che voglio fare? Questo sembra un set comune, ma non ero sicuro.

Grazie.

risposta

2

Se è facile per eseguire script per spinta, si potrebbe ganci di impostazione di spingere:

  • da GitHub ad un nudo (worktree vuoto) pronti contro termine sul vostro web server
  • dal repo nuda sul vostro web server al pronti contro termine "live" (con un worktree che rappresenta il vostro sito web)

È quindi possibile associare che con un gancio sul "live" pronti contro termine per l'aggiornamento stesso (attraverso un "git merge", unendo il contenuto del tuo repository nudo a y il nostro repo "live"), ogni volta che il tuo repo nudo spinge qualsiasi cosa.

Ottieni l'effetto desiderato: qualsiasi push al repository GitHub (per un determinato ramo, suppongo) attiverà un aggiornamento sul repository del server Web "live".

1

Ho realizzato qualcosa che funziona quasi esattamente in questo modo, tranne per il fatto che il repository "remoto" che riceve la spinta è sulla stessa macchina del repository che in seguito tira. È vero (e importante) che esattamente lo stesso insieme di utenti ha le autorizzazioni su entrambi i repository. (Ma questo dovrebbe essere OK, non vuoi che le persone casuali spingano il tuo repository.) In ogni caso, ho semplicemente il git post-update che richiama uno script di shell che fa il pull per me. L'unica cosa complicata è che devi pulire l'ambiente (ho usato env -i, o puoi disabilitare le variabili relative a git), altrimenti il ​​pull si confonde.