Soy un desarrollador web que trabaja por mi cuenta usando django, y estoy tratando de entender cómo implementar sitios usando mercurial. Lo que me gustaría tener es poder mantener un repositorio que pueda usar para el trabajo de producción y desarrollo. Siempre habrá algunas diferencias entre producción/desarrollo (por ejemplo, pueden usar bases de datos diferentes, el desarrollo siempre tendrá activada la depuración) pero, en general, estarán sincronizados. También me gustaría poder realizar cambios directamente en el servidor de producción (ordenando html o css, correcciones de errores simples, etc.).Mercurial: mantener 2 ramas sincronizadas pero con ciertas diferencias persistentes?
El flujo de trabajo que tengo la intención de utilizar para hacer esto es el siguiente:
- crear 2 ramas, prod y dev (todos los ajustes inicialmente en su configuración de producción)
- Cambio settings.py y unos pocos otras cosas en la rama de desarrollo. Así que ahora tengo 2 cabezas, y de ahora en adelante el repositorio siempre tendrá 2 cabezas.
- (en la máquina dev) Realice cambios en dev, luego use 'hg transplant' para copiar los conjuntos de cambios relevantes a producción.
- empuje para repositorio principal
- (El servidor de producción) Tire de repo principal, actualizar a la cabeza prod
Nota: también se puede hacer cambios directamente a pinchan siempre y cuando se trasplanta los cambios en prog.
Este flujo de trabajo tiene el inconveniente de que cada vez que realiza un cambio, no solo debe comprometerlo con la rama en la que realice el cambio, sino que también debe trasplantarlo a la otra rama. ¿Hay una manera más sensata de hacer lo que quiero aquí, tal vez usando parches? O en su defecto, ¿hay alguna manera de automatizar el proceso de confirmación para trasplantar automáticamente el conjunto de cambios a la otra rama, y sería una buena idea?
Voy a pesar en una respuesta más adelante, aunque excelente sugerencia de Steve L. ya se ha seleccionado, pero quiero señalar que, independientemente de la forma en que finalmente lo hace , la extensión 'trasplante 'es una forma particularmente mala de hacerlo. Transplant hace una exportación y luego una importación, que le dan a su conjunto de cambios una identificación hash/node completamente nueva. Si cada conjunto de cambios cambia los nombres entre el desarrollo y la producción, está pidiendo problemas para rastrear qué se solucionó en dónde y dónde se introdujo el problema. Hacer 'hg entrante' y' hg saliente' inutilizable entre dev y prod es pedir problemas. –