2010-09-01 17 views
13

Ho un progetto Django di un cliente che sto sviluppando localmente, usando Mercurial per il controllo della versione. Spingo il mio repository locale sul mio server remoto personale (dove tengo tutti i miei progetti) e poi quando vengo a distribuirlo (su qualsiasi server web) clone quel repository dal mio server personale.Come si clona un repository Mercurial in una directory già esistente?

Questo funziona bene sulla maggior parte dei server (dove ho il controllo totale) ma ho alcuni progetti su cui sto distribuendo su WebFaction. WebFaction è fantastico, ma un po 'insolito con il suo setup, dato che ho bisogno di dichiarare il progetto Django come' applicazione 'attraverso il pannello di controllo. Questo crea automaticamente alcune cose, come una cartella 'apache2', 'myproject', ecc. È la stessa cartella anche se voglio clonare il repository dal mio server remoto personale. Fare il consueto comando hg clone non funziona, anche se dice che la cartella di destinazione esiste già. Non c'è molto che posso fare sul contenuto di questa cartella, quindi ho bisogno di ovviare a questo.

Non sono un esperto di Mercurial e l'unico modo in cui mi sembra di riuscire a risolverlo è clonarlo in un'altra cartella e quindi spostare tutti i contenuti (incluso il file .hg) nella cartella effettiva che desidero. Questo sembra sciocco però ...

Sto usando Mercurial v1.6.2 (installato tramite easy_install). Qualcuno potrebbe condividere un po 'di luce su questo?

Molte grazie.

+0

Non sei l'unico ad essersi imbattuto in questa funzionalità di mercurial: http://mercurial.selenic.com/bts/issue1462 – msw

risposta

1

Nel complesso, sembra che si stia tentando di usare Mercurial come un gestore di installazione che non è certamente il suo obiettivo di progettazione.

Se sto leggendo correttamente, parte del tuo repository sorgente dovrebbe essere qualcosa come make deploy che mette i file nelle loro giuste posizioni. In altre parole, avere un clone di repository (nella versione .hg) nella directory di installazione sembra strano e soggetto a problemi.

+1

In realtà, molte persone lo fanno e funziona molto bene. Di solito, si esegue un 'push' su un server di produzione che ha un hook' changegroupq che esegue un 'update' automatico. Ci sono molte domande qui in overflow dello stack in cui solo una tale configurazione è raccomandata. L'utilizzo di un tag di "produzione" o simili come target per l'aggiornamento automatico funziona molto bene. –

+0

@ Ry4an: Qui c'è almeno un argomento contatore che richiama gli stessi problemi che mi interessavano. Non è "giusto" ma è stato l'unico rilevante per la mia ricerca e mi piacerebbe vedere un rappresentante dall'altra parte. Se si sta utilizzando un hook di commit, sembra che ci debba essere uno script implicito di "installazione" attivato solo da hg. Non ho mai fatto un dispiegamento diretto, quindi mi piacerebbe sapere quale "barca" mi è sfuggita. http://stackoverflow.com/questions/2361708/using-hg-repository-as-web-site – msw

+0

Dopo aver esaminato di nuovo il mio progetto, devo concordare con msw.Sto complicando le cose qui, sembra che dovrei essere solo la versione che controlla la mia cartella del progetto Django e non roba intorno ad essa. In questa situazione, ha senso. Grazie. – littlejim84

10

È possibile copiare solo la cartella .hg, quindi ripristinare o aggiornare la mancia. Es .:

cp -a src/.hg dest/ 
cd dest 
hg up -C 
1

è possibile spostare la cartella dopo il fatto oppure è sufficiente creare un collegamento simbolico. la mia directory webfaction è in realtà un collegamento simbolico, quindi so che funziona correttamente.

21

Copiare solo la .hg dir funziona sicuramente, ma è anche possibile eseguire un hg init e quindi hg pull http://remote/repo. Un repository appena inizializzato ha solo il changeset di 000000000000000, quindi puoi prelevare da qualsiasi repository senza ricevere l'avviso "repository non correlati". Questo è essenzialmente lo stesso di hg clone --pull con un init manuale.

+2

grazie! Mi hai insegnato un ottimo consiglio di hg :-) +1 –

+0

Ho dovuto aggiornare 'hg' dopo aver tirato. Ho tirato con una revisione specifica '-r X' – juanmirocks

Problemi correlati