Git: pull automatico dal repository?


90

C'è un modo per impostare git in modo tale che ascolti gli aggiornamenti da un repository remoto e tirerà ogni volta che qualcosa cambia? Il caso d'uso è che voglio distribuire un'app web usando git (quindi ottengo il controllo della versione dell'applicazione distribuita) ma voglio mettere il repository git "centrale" su Github piuttosto che sul server web (l'interfaccia di Github è semplicemente così bella) .

Qualcuno l'ha fatto funzionare? Come fa Heroku? Il mio Google-fu non riesce a darmi risultati pertinenti.

Risposte:


48

Git ha "hook", azioni che possono essere eseguite dopo altre azioni. Quello che sembri cercare è "post-ricezione hook". Nell'amministratore di GitHub, puoi impostare un URL post-ricezione che verrà raggiunto (con un payload contenente dati su ciò che è stato appena inviato) ogni volta che qualcuno spinge al tuo repository.

Per quello che vale, non penso che l'auto-pull sia una buona idea - e se qualcosa di sbagliato fosse stato inserito nel tuo ramo? Userei uno strumento come capistrano(o un equivalente) per queste cose.


10
Il mio caso d'uso pianificato era di avere un repo / ramo separato per la fase di sviluppo "test e scherzi" e avere uno speciale repository "push to production" a cui spingo solo una volta che sono sicuro che tutto funzioni. Fondamentalmente sto usando Git per fare con rsync, tranne per il fatto che mantiene un registro di tutte le versioni che vengono distribuite e sarei facilmente in grado di tornare a una versione precedente. Il vantaggio rispetto a qualcosa di più hardcore come capistrano è che non dovrei imparare uno strumento completamente nuovo per quello che è (per ora) un progetto davvero piccolo.
Li Haoyi

L'autenticazione tramite webhook aggiunge ulteriori problemi di sicurezza e complessità, quindi le soluzioni basate su pull hanno ancora i loro vantaggi. Il controllo della versione del rilascio può essere eseguito con tag per evitare la distribuzione accidentale.
lz96

21

Su unix-like puoi creare cron job che chiamano "git pull" (ogni giorno o ogni settimana o qualsiasi altra cosa) sulla tua macchina. Su Windows puoi usare l'utilità di pianificazione o il comando "AT" per fare la stessa cosa.


3
Non è un modo corretto di usare Git.
immersione profonda

26
@deepdive Perché no? Immagina di avere un piccolo Rasperry Pi in casa e nessun IP statico disponibile. Quale altra opzione hai quindi eseguire un cron o eseguire un lavoro?
Kaiser

2
Non è una buona idea. Vuole che le modifiche vengano applicate immediatamente dopo aver spinto.
boi_echos

10
L'OP richiede specificamente un metodo che ascolti gli aggiornamenti da un repository remoto e tirerà ogni volta che qualcosa cambia . Questa soluzione verrebbe semplicemente estratta dal repository ogni tanto, quindi affinché sia ​​efficace l'intervallo dovrebbe essere molto breve, portando a un gran numero di richieste pull ridondanti.
Boaz

3
Un modo rapido per fare questo senza cambiare scheda cron: while true; do git pull; sleep 10; done. Questo farà un git pullogni 10 secondi ...
JakeD

3

Esistono programmi di integrazione continua come Jenkins o Bamboo, in grado di rilevare i commit e attivare operazioni come build, test, package e deploy. Fanno quello che vuoi, ma sono pesanti con le dipendenze, difficili da configurare e alla fine possono usare un controllo periodico contro il repository git, che avrebbe lo stesso effetto come chiamare git pull da cron ogni minuto.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.