Come fare un file di aggiornamento "git push" sul tuo host web?


13

Ho alcuni siti che sono tutti ospitati sullo stesso servizio di web hosting in hosting condiviso. Il mio host web supporta Git e ho accesso SSH ad esso, e ho anche l'installazione di Git sul mio laptop.

Voglio fare in modo che quando eseguo un "master git push origin", aggiorni automaticamente i file sul mio server Web e salvi anche un backup dei file del commit precedente in modo da poter facilmente eseguire il rollback se lo desidero. È possibile?


Curioso: chi è il tuo provider di hosting?
utente

E perché vorresti un "backup dei file del commit precedente"? Puoi semplicemente eseguire il commit precedente, se vuoi tornare indietro (supponendo che tu sappia sempre cosa hai spinto per ultimo, ma dovresti comunque saperlo).
sleske

Risposte:


12

Questo è riassunto da Uso di Git per gestire un sito web

La chiave del processo è l'hook post-server sul lato server (ulteriori informazioni sugli hook git nella sezione Personalizzazione di Git - Git Hooks e nella pagina man di githooks ). Questo hook viene eseguito dopo che il server ha ricevuto tutti i dati.

Una volta che il server riceve i dati, esegue git checkout -f L'opzione -f forza un checkout in testa anche se ci sono differenze locali.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Mettilo nella hooks/directory come post-receiveed eseguibile. Ovviamente, il percorso cambia nel punto in cui hai i file del tuo server web (l'uso di GIT_WORK_TREEimposta la variabile d'ambiente in modo che non sia necessario destreggiarsi tra file dot e impostazioni git sul server).

Per il rollback, si dovrebbe etichettare ogni versione (questo può essere fatto anche come parte dell'hook post-commit). Contrassegnando il rilascio è possibile identificare facilmente il punto in cui eseguire il rollback, sebbene ciò implichi probabilmente l'accesso al server e il checkout di tale tag.


Va notato che questo significa che stai usando git come uno strumento di distribuzione, il che è qualcosa per cui non è realmente inteso. Può funzionare, ma ci sono numerose limitazioni (è necessario scaricare l'intero repository, nessun modo per invocare script o gestire i permessi dei file, nessun modo per decomprimere le cose ...). Probabilmente è meglio usare uno strumento di distribuzione adeguato.
sleske

@sleske Puoi fare tutto questo post-receiveall'amo, che in realtà è solo uno script in cui puoi inserire quello che vuoi.
Mario

@Mario: Sì, è possibile, il che significa che stai implementando in modo efficace la tua soluzione di distribuzione come hook post-ricezione. Ci sono ancora dei vantaggi nell'usare una soluzione esistente, ma a volte può essere la soluzione migliore ...
sleske,

È anche possibile effettuare il checkout in una cartella intermedia e disporre di collegamenti dalla cartella Web alla cartella intermedia per evitare di avere file .git nella cartella Web.
Bent

0

Il modo più semplice per aggiornare l'albero di lavoro del repository a cui si sta spingendo è l'impostazione git config receive.denyCurrentBranch updateInstead sul lato ricevitore. Vedi https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

La risposta di Ryan con gli hook di post commit è migliore in quanto consente di effettuare il checkout in una posizione diversa (probabilmente non si desidera avere .git nella cartella Web). Ma a questo livello, potrebbe essere una buona idea utilizzare alcuni strumenti di distribuzione esistenti, come ha detto sleske nei commenti.

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.