Sono uno sviluppatore web che lavora da solo con django e sto cercando di capire come utilizzare i siti con Mercurial. Quello che mi piacerebbe avere è essere in grado di mantenere un repository che posso usare sia per la produzione che per lo sviluppo. Ci saranno sempre alcune differenze tra produzione/sviluppo (ad esempio potrebbero utilizzare database diversi, lo sviluppo avrà sempre il debug attivato) ma nel complesso saranno sincronizzati. Mi piacerebbe anche essere in grado di apportare modifiche direttamente sul server di produzione (riordinando html o css, semplici correzioni di bug, ecc.).Mercuriale: mantenere 2 rami sincronizzati ma con alcune differenze persistenti?
Il flusso di lavoro che intendo utilizzare per fare questo è la seguente:
- creare 2 rami, prod e dev (Tutte le impostazioni inizialmente impostati su impostazioni di produzione)
- Change settings.py e pochi altre cose nel ramo dev. Quindi ora ho 2 teste, e da ora in poi il repository avrà sempre 2 teste.
- (Sulla macchina di sviluppo) Apportare le modifiche a dev, quindi utilizzare 'hg trapianto' per copiare i changeset rilevanti in produzione.
- spinta da padroneggiare repository
- (Sul server di produzione) Tirare da maestro di pronti contro termine, l'aggiornamento a testa prod
Nota: è anche possibile apportare modifiche direttamente al prod fino a quando si trapiantare le modifiche nel dev.
Questo flusso di lavoro ha lo svantaggio che ogni volta che si apporta una modifica, non solo si deve eseguire il commit su qualsiasi ramo su cui si effettua la modifica, ma è necessario trapiantarlo sull'altro ramo. C'è un modo più ragionevole di fare ciò che voglio qui, magari usando le patch? Oppure, in caso contrario, esiste un modo per automatizzare il processo di commit per il trap automatico del changeset sull'altro ramo e sarebbe una buona idea?
mi peso in una risposta di seguito, anche se è già stata selezionata ottimo suggerimento di Steve L., ma voglio sottolineare che indipendentemente da come si fa finalmente , l'estensione "trapianto" è un modo particolarmente brutto per farlo. Transplant esegue un'esportazione e quindi un'importazione, che fornisce al tuo changeset un nuovo hash/id del nodo. Se ogni changeset cambia i nomi tra lo sviluppo e la produzione, ti viene chiesto di tenere traccia dei problemi che sono stati risolti dove e dove è stato introdotto un problema. Rendere inutilizzabili 'hg incoming' e' hg outgoing' tra dev e prod sta chiedendo problemi. –