2010-01-14 12 views
6

Sto usando git per tenere traccia di un progetto, e se è possibile, mi piacerebbe impostare le cose in modo che git gestisca tutta la mia staging del codice, posso avere un repository locale per i test, e poi spingere le modifiche al server con per farli vivere Tuttavia, nel tentativo di utilizzare le chiamate standard git push, mi ritrovo con ramificazioni incoerenti e un terribile caos di storie contrastanti. C'è un modo per gestire la stadiazione usando git?Posso usare git per mantenere aggiornato un server remoto?

risposta

9

Bisogna in questo blog post un esempio di Git repo utilizzati per la stadiazione:

IDE => local Git repository => remote bare Git repository 
            => Git repository with the live web application 

Esso comporta un gancio post-aggiornamento sul lato repo nudo, per innescare l'aggiornamento repo sul vivo lato server web.

Il passaggio finale è definire lo script di hook "post-aggiornamento" sul repository nudo, che viene chiamato quando il repository nudo riceve i dati.
Per abilitare il hook "post-update", dobbiamo rendere hooks/post-update eseguibile o rinominare hooks/post-update.sample a hooks/post-update, a seconda della versione di Git.
In questo script, abbiamo semplicemente passare alla cartella dell'applicazione dal vivo, e avviare l'operazione di tiro:

#!/bin/sh 
cd $HOME/example.org 
unset GIT_DIR 
git pull bare master 

exec git-update-server-info 

Il motivo non v'è un repo remoto nudo è perché è “sconsigliato” a fai un push in un repository con una directory di lavoro.

+0

Qual è il vantaggio del repository nudo? Nella misura in cui è scoraggiato spingersi in un albero di lavoro, non hai guadagnato nulla se non la complessità aggiungendo questo passaggio intermedio. Non li ho provati e non conosco bene Git, quindi se volessi elaborare altro sarebbe molto più utile – SamGoody

+0

@SamGoody: in realtà, preferirei non usare il * terzo * repo per l'implementazione del sito web in diretta , ma il secondo * deve * essere nullo per rendere * sicuro che nessuna modifica locale interferisca con il fatto che tu spinga nuovi commit ad esso *. Vedi http://stackoverflow.com/questions/5490434/git-live-server-best-practices/5491039#5491039. Il gancio post-ricezione combinato con un archivio git (un tar da estrarre) è migliore. – VonC

+0

Allo stato attuale il lavoro viene eseguito occasionalmente sul server live e quindi unito ai computer di sviluppo. (Ammesso che la nostra configurazione sia inusuale, è corretta per le nostre esigenze). Abbiamo bisogno che il server live abbia la possibilità di ricevere e inviare modifiche. Idealmente, quando viene premuto, le modifiche dovrebbero essere unite in [o un errore dovrebbe essere registrato]. L'archivio Git non sarebbe adatto. Questa soluzione sarebbe, ma perché non spingere direttamente? – SamGoody

0

Anche se git è un sistema di controllo di versione distribuito, di solito è una buona idea avere un repository centrale (potrebbe essere uno --bare). Semplifichera le cose.

+0

Sì, ma come può essere utile gestire un ramo di gestione temporanea, un ramo di produzione e uno o più rami di sviluppo? – Thilo

+0

Dovrei avere un repository centrale, quindi clonarlo sia localmente che sul server live, quindi SSH e fare pull manuali per aggiornare? Questo ha senso, ma sembra che ci dovrebbe essere una soluzione più elegante. – futuraprime

+0

Un repository centrale nudo sul server live sarebbe sufficiente. Dal momento che stai ottenendo storie contrastanti, immagino che tu faccia dei cambiamenti nel sito di produzione. Se ciò ti sembra conveniente, le estrazioni manuali dovrebbero essere ok. Se puoi andare senza tali cambiamenti, usa il gancio post-aggiornamento come suggerito da VonC. –

Problemi correlati