2010-03-23 10 views
9

Come libero professionista, lavoro spesso in aziende che usano repository Subversion.Posso utilizzare Mercurial localmente e aggiornare da/push a un repository Subversion?

Sarebbe utile se potessi usare Mercurial per ottenere il codice da questi repository, tenere traccia delle mie modifiche quando sono offline e poi trasferire tutte le mie modifiche locali al server Subversion della società quando torno online.

Funziona? Hai letto qualche buon tutorial sulle specifiche?

+0

domanda simile qui: http://stackoverflow.com/questions/799860/ utilizzando-mercuriale-locale-solo-con-subversion-server. Penso che la mia domanda dovrebbe rimanere in giro anche se; questa è una di quelle domande che possono essere formulate in diversi modi. –

+0

Aaa e questo: http://stackoverflow.com/questions/826938/interoperation-between-mercurial-and-subversion –

+0

Ecco la stessa domanda su Kiln Overflow, o come si chiama: http://kiln.stackexchange.com/ domande/948/can-i-use-mercurial-local-e-update-da-push-to-a-a-subversion-repository/950 # 950 –

risposta

5

Prova HgSubversion. Ti permette di fare proprio questo. È possibile clonare localmente un repository svn (parte di) su un repository hg e lavorare con hg localmente e svn in remoto (push e pull fanno ciò che ci si aspetterebbe da loro).

L'ho usato con qualche successo in passato, ma non ho una vasta esperienza con esso.

2

È possibile trovare alcune informazioni su questo wiki page.

8

Sto lavorando in un'azienda che utilizza CVS, quindi HgSubversion non era un'opzione. Ho avuto la stessa domanda un paio di giorni fa e sviluppato un flusso di lavoro in base a questo:

http://momentaryfascinations.com/programming/how.to.use.mercurial.for.local.source.code.management.with.a.public.subversion.server.html

ho creato un repository Mercurial in cui il mio repository CVS è, che mi trattano come "sola lettura". Quindi clone questo repository hg "readonly" in repository funzionanti, dove apporto modifiche/correzioni localmente. Ho clonato il repository per ogni funzionalità e correzione che ho apportato, ma potresti anche avere un solo repository e utilizzare una diversa strategia di ramificazione per gestire il tuo sviluppo. Ecco a good overview di tali strategie.

La chiave di questo flusso di lavoro è quella del repository "readonly". Ero solito apportare le mie modifiche nel primo repository Mercurial che ho creato, che era in cima al CVS. Questo ha funzionato, ma ha creato confusione durante l'aggiornamento da CVS. Con questo livello aggiuntivo, puoi gestire le tue modifiche e aggiornare da CVS separatamente.

Mantenere in sincronia con CVS

Ogni volta che ci sono cambiamenti nel CVS, faccio un cvs update. Al repository hg "readonly", questo apparirà come file modificati. Per sincronizzare Mercurial, faccio semplicemente un

hg ci -m "Updated from CVS." 

(Quindi, vedrete un sacco di quei messaggi nei miei ceppi Hg). A questo punto, il mio repository "readonly" è sincronizzato con CVS. Ora posso andare in uno dei repository che ho clonato ed emettere uno hg pull e quindi hg update per sincronizzarli.

commit dei cambiamenti da hg di nuovo al CVS

Andando nella direzione opposta, quando voglio impegnarsi a CVS, andrò in uno dei miei repository di lavoro in cui ho commesso i miei cambiamenti già a hg . Quindi I hg push le mie modifiche di nuovo a "readonly", saltare al repository "readonly", fare un hg update. Dal punto di vista di CVS, questo apparirà come appena modificato. Quindi faccio un cvs commit di nuovo in CVS. Qui dovrò ripetere/riepilogare nel mio messaggio di registro il lavoro che ho fatto nel mio repository hg.

Certo, ci sono punti difficili in questo flusso di lavoro.Potresti apportare più modifiche in hg, che si sommano a una sola modifica in CVS/SVN, in modo che la cronologia non venga mantenuta in CVS/SVN e dovrai riassumere i tuoi messaggi di commit. Devi gestire manualmente mantenendo in sincrono CVS e il repository "readonly". Il vantaggio di questo è che non è necessario installare estensioni aggiuntive: si tratta solo dei file stessi da entrambe le prospettive. Tutto ciò che sta accadendo è abbastanza trasparente e sotto il tuo controllo.

Sto ancora tagliando i denti su hg, ma finora questo flusso di lavoro ha funzionato abbastanza bene.

Harvey ha fornito un bel schema di questo e lo rende un ottimo punto che questo flusso di lavoro si applica a qualsiasi altro VCS:

alt text http://sr105.com/other_vcs_to_hg_workflow.png

+1

"Sto lavorando in un'azienda che sta usando CVS" - yikes. –

+3

@bentsai: questa è una buona spiegazione del probabilmente il modo più semplice per usare mercurial con * qualsiasi * altro VCS. Buono per i consulenti. Ha bisogno di un diagramma. – Harvey

+2

Diagramma che potresti inserire nella tua risposta: http://sr105.com/other_vcs_to_hg_workflow.png – Harvey

Problemi correlati