¿Qué VCS me permite agregar cambios a múltiples commits pendientes simultáneamente?

Mi flujo de trabajo por lo general implica que realice varios cambios en un file, cada uno de los cuales pertenece a su propia unidad conceptual de cambio en el proyecto (= compromiso).

Lo que me gustaría hacer es agregar ciertos diffs (ya sea un file completo, o solo ciertas líneas de un file) a un commit pendiente (que probablemente debería ser nombrado) y tener varios commit pendientes 'activos' al mismo time.

Luego, cuando todos los cambios relacionados con una determinada confirmación pendiente se completan en todos los files, puedo confirmar la confirmación nombrada.

¿Alguna idea de qué VCS sería un buen candidato para esto?

En svn, puede definir lists de cambios y luego comprometer solo los files en una list de cambios particular.

Git va un poco más allá y te permite grabar parches seleccionando de forma interactiva trozos cambiados de un file con git add -p .

Aunque son populares, estas características son contrarias a las mejores prácticas. No puede probar sus cambios correctamente de esta manera. Todo puede funcionar en su copy de trabajo, pero una confirmación de solo una parte de los cambios puede romper la compilation. El uso de twigs de características es mucho más seguro, y cualquier sistema de control de versiones moderno es compatible con esto.

También están Mercurial ShelveExtension y git-stash , que le permiten archivar los cambios seleccionados en la granularidad de patch hunks para posteriores commits. Esta forma de trabajar te permite realizar testings correctamente antes de comprometerte.

La request original se parece mucho a "cherry picking": selección manual de fragments de un "diff" para include en un nuevo compromiso. Al less Git y Darcs lo respaldan. Para emacs + git hay gitsum , que me gusta mucho.

Sería muy difícil garantizar que la confirmación de cada cambio por separado da como resultado un sistema comstackble.

Recomiendo encarecidamente hacer una cosa a la vez y cometer cada problema por separado.

Advertencia de contenido: mi printing, basada solo en conocidos de paso:

Si necesita micro administrar cambios simultáneos pero en algún sentido no relacionados, entonces puede interesarle investigar los darcs , que tienen un énfasis inverso cuando se los compara con sistemas como svn, git o mercurial.

En darcs, el parche es el elemento key, y el estado de una twig determinada es realmente solo una sum de un set de parches. Este model puede adaptarse a lo que intenta hacer, pero es evidente la advertencia de @ wcoenen sobre las mejores prácticas. Para cada set de parches, deberá asegurarse de que la construcción (cualquiera que sea su contenido) no esté rota.

Por cierto, eres el Eoghan M … ¿crees que lo eres?

en bzr puede usar commands shelve / unshelve para get algunos cambios de sus files y luego volver, o use el plugin de loom para administrar fácilmente un set de parches relacionados. Pero ninguno de estos resolverá su request original, y dudo que ningún VCS pueda hacerlo de esta manera.

El cliente de Subversion (> = 1.5) contiene la noción de una list de cambios: un grupo de files que están asociados con un nombre elegido .

Esto se vuelve especialmente útil cuando se trabaja en varios sets diferentes de files dentro de la misma copy de trabajo. En lugar de tener que recordar cada file en cada set, Subversion le permitirá asociar una list de cambios con cada set de files. La mayoría de los commands que toman un set de files como objectives ahora también aceptarán la opción –changelist, que filtra esos objectives basándose en los miembros de la list de cambios. La membresía Changelist se puede editar utilizando el nuevo subcommand changelist.