2013-03-04 7 views
11

Qual è il set up per avere Github spingere automaticamente tutti gli aggiornamenti su un server remoto?Fare Github push a un server remoto quando riceve gli aggiornamenti

Questo è utile per mantenere una base di codice su Github, e avere un sito web gestito fuori che codebase.

  1. ho il mio repo sul mio computer, questo è dove lavoro.

  2. consegno il mio cambiamenti sul mio repo locali, e spingerli al mio repo Github.

  3. voglio che il mio repo Github per poi spingere questi cambiamenti al mio server remoto.

Ho fatto ricerche per tutto il giorno, e utilizzando i 'ganci' sembra ragionevole. Forse usando un hook "post-receive" su Github che poi esegue un comando push sul mio server remoto.

Qualche suggerimento?

risposta

10

quanto ho capito github non consente di definire ganci "veri". Come post-ricevere. Invece forniscono qualcosa chiamato webhook agli sviluppatori. ciò che puoi fare con questo è inviare una richiesta web a qualsiasi URL specificato da te ogni volta che c'è una spinta al tuo repository.

Che cosa si può fare è: impostare un server web sul vostro server git remoto e configurare GitHub per effettuare una chiamata http ad esso su post-ricezione. Ogni volta che github notifica al tuo server remoto, fai un pull da github.

vedi qui su come utilizzare webhooks: https://help.github.com/articles/post-receive-hooks

P.S. Un vero mechianesimo di hook avrebbe potuto essere una vulnerabilità di sicurezza per Github, in quanto consente di eseguire codice personalizzato sui propri server. Quindi hanno creato qualcosa che non ti permette di eseguire nulla ma ti consente comunque di fare tutto ciò che vuoi.

7

Per illustrare Yervand s' answer (upvoted), considerare questo peligangit come un esempio di un semplice server HTTP (che è possibile installare sul vostro esempio amazon-EC2), che sarà:

  • inizio un semplice server HTTP.
  • ascolto per un post da un GitHub webhook
  • tirerà giù i nuovi commit

workflow

quella biblioteca sarebbe prendere, e quindi reimpostare il ramo principale sull'origine/master.
Questo è un modo per farlo. (vedi githook.py)

def hard_reset_repos(self): 
    self.server.source_repo.fetch([self.server.source_repo.origin]) 
    self.server.source_repo.reset(['--hard', self.server.source_repo.originMaster]) 
Problemi correlati