En un VCS tradicional, puedo entender por qué no comprometerías archivos sin resolver porque podrías romper la compilación. Sin embargo, no entiendo por qué no debe comprometer los archivos sin resolver en unos DVCS (algunos de ellos en realidad evitar que se cometan los archivos).
En cambio, creo que su repositorio debería estar bloqueado de empujar y tirar , pero no comprometerse.
Ser capaz de comprometerse durante el proceso de fusión tiene varias ventajas (como lo veo):
- Los cambios reales de fusión están en la historia.
- Si la fusión fue muy grande, podría realizar confirmaciones periódicas.
- Si cometió un error, sería mucho más fácil retroceder (sin tener que rehacer toda la fusión).
- Los archivos pueden permanecer marcados como no resueltos hasta que se marquen como resueltos. Esto evitaría empujar / tirar.
También podría tener un conjunto de conjuntos de cambios que actúen como la combinación en lugar de solo uno. Esto le permitiría seguir utilizando herramientas como git rerere
.
Entonces, ¿por qué cometer con archivos no resueltos está mal visto / impedido? ¿Hay alguna otra razón que no sea la tradición?
hg 1.6
después de una fusión, los archivos se marcan como no resueltos. hg
será no dejará enviar hasta que se haya marcado como resuelto (no necesariamente significa que realmente tiene que resolverlos, pero que supongo que esa es la idea).
hg
realidad mantiene una lista de archivos que se han marcado o no como "resueltos" (usando hg resolve
). Si hay U
archivos en esta lista, no le permitirá comprometerse.
hg resolve
se usa específicamente para fusiones con conflictos; ver selenic.com/mercurial/hg.1.html#resolve . Note that Mercurial will not let you commit files with unresolved merge conflicts. You must use hg resolve -m ... before you can commit after a conflicting merge.