No estoy de acuerdo con esta regla y estoy de acuerdo con lo que dijo Mason Wheeler . Me gustaría agregar algunas ideas.
Intento comprometerme cada vez que tengo un cambio significativo que comprometer: esto puede ser varias veces al día si reparo varios errores pequeños, o una vez a la semana si estoy trabajando en un software más grande que no puede ser usado por el resto de el código de manera significativa hasta que alcance un estado consistente.
Además, interpreto el compromiso como la publicación de una revisión significativa que aporta una nueva funcionalidad a la base del código. Creo que uno debería tratar de limpiar el código antes de comprometerse para que otros desarrolladores puedan comprender el significado y el propósito del cambio cuando miran el historial de revisiones. Cuantos menos cambios vean otros desarrolladores en el historial, mejor: cuando miro el historial de revisiones quiero ver incrementos que agreguen alguna funcionalidad significativa; No estoy interesado en cada pequeña idea que cada desarrollador tenía y quería probar antes de llegar a la solución.
Además, no creo que sea una buena idea usar el servidor SVN (o cualquier sistema de control de versiones) como un recurso de respaldo al que se compromete la instantánea actual del código (siempre que se compile): puede usar una memoria USB o una unidad USB externa o un disco de red para reflejar su código actual para que no se pierda si su computadora se descompone. El control de revisión y la copia de seguridad de datos son dos cosas diferentes. Publicar una revisión no es lo mismo que guardar una instantánea
de su código.
Finalmente, creo que no debería ser un problema comprometerse de vez en cuando (es decir, solo cuando uno está realmente satisfecho con el estado actual del código) y evitar conflictos de fusión no es una buena justificación para comprometerse (demasiado) a menudo. Muchos conflictos de fusión ocurren cuando diferentes personas trabajan en los mismos archivos al mismo tiempo, lo cual es una mala práctica (ver, por ejemplo, este artículo , punto 7). Los conflictos de fusión deben reducirse dividiendo un proyecto en módulos con interfaces claras y la menor cantidad de dependencias posible, y coordinando el trabajo de los desarrolladores para que el código en el que trabajan se superponga lo menos posible.
Solo mis 2 centavos.
EDITAR
Otra razón contra las confirmaciones prematuras que se me ocurrió es que no se puede probar una versión (muy) defectuosa. Si se está comprometiendo en el tronco y su equipo de prueba está probando todos los días, es posible que no tengan una versión comprobable durante unas horas (o por un día). Incluso si no intenta corregir el error y simplemente revierte los cambios, una reconstrucción puede demorar un par de horas. Con, por ejemplo, cinco probadores trabajando en su equipo, ha perdido 5 x 2 = 10 horas del tiempo del equipo debido a la inactividad. Me sucedió una vez, así que realmente trato de evitar los commits prematuros en nombre del commit lo antes posible .