¿Cuáles son las ventajas de los sistemas de control de versiones que versionan cada archivo por separado?

15

En los últimos años, he trabajado con varios sistemas de control de versiones diferentes. Para mí, una de las diferencias fundamentales entre ellos ha sido si versionan los archivos individualmente (cada archivo tiene su propia numeración e historial de versiones por separado) o el repositorio como un todo (un "commit" o versión representa una instantánea de todo el repositorio) .

Algunos sistemas de control de versiones "por archivo":

  • CVS
  • ClearCase
  • Visual SourceSafe

Algunos sistemas de control de versiones de "todo el repositorio":

  • SVN
  • Git
  • Mercurial

En mi experiencia, los sistemas de control de versiones por archivo solo han generado problemas y requieren mucha más configuración y mantenimiento para usarlos correctamente (por ejemplo, "especificaciones de configuración" en ClearCase). He tenido muchos casos de un compañero de trabajo que cambia un archivo no relacionado y rompe lo que idealmente sería una línea de desarrollo aislada.

¿Cuáles son las ventajas de estos sistemas de control de versiones por archivo? ¿Qué problemas tienen los sistemas de control de versiones de "todo el repositorio" que los sistemas de control de versiones por archivo no tienen?

Mike Daniels
fuente
3
Creo que principalmente ha sido así históricamente y ahora nos estamos alejando de los sistemas orientados a archivos a los orientados a conjuntos de cambios, pero desde el punto de vista actual es difícil entender por qué las personas incluso probaron el enfoque por archivo. Excelente pregunta!
blubb
Disculpas si esta pregunta sale como argumentativa. Es producto de alguna frustración reciente.
Mike Daniels
1
@ Mike Daniels: No lo hace (al menos para mí) ya que claramente pides las ventajas.
blubb
Estos dos puntos de vista son simplemente convenciones diferentes. Cualquier argumento a favor de uno sobre el otro solo genera contraargumentos de parte de partidarios del otro lado. Por ejemplo, si desea un comportamiento de "representación completa" en Clearcase, puede personalizar sus especificaciones de configuración por fecha.
mouviciel
SVN tiene una versión por archivo, ¿o eso también cambió en la última versión?
Klaim

Respuestas:

12

En mi experiencia, no hay ninguno: VCS "repositorio completo" domina estrictamente VCS "por archivo".

Rein Henrichs
fuente
3

Por archivo tiene una ventaja cuando crea líneas de productos (múltiples productos de software) desde el mismo repositorio.

Algunos entornos de contratación de clientes requieren evidencia de que su caída de código SOLO tiene los cambios que desean, y no otros cambios. Esto es bastante fácil si los números de versión del archivo siguen siendo los mismos.

Y este no es un ejemplo al azar que saqué de la nada.

Esto sucedió la última vez que estaba enviando actualizaciones de software al ejército de EE. UU. Para un sistema que compraron grandes cantidades de mi anterior empleador. El valor en dólares de los contratos se midió en miles de millones de dólares fraccionarios (cuando los dólares estadounidenses valían mucho más)

Entonces ayuda algunas veces.

Curiosamente: donde trabajo ahora, enviamos a cada cliente una entrega diferente también ... (Y eso no es algo que decidí, en caso de que te lo estés preguntando).

Sospecho que es mucho más común en el espacio de defensa / aeroespacial que en aplicaciones retráctiles o aplicaciones web.

Tim Williscroft
fuente
3
Pero una rama del repositorio de archivos completo también satisfaría las mismas necesidades. Por ejemplo, en bzr, las ramas son completamente independientes de la línea principal hasta su fusión (o compartir un repositorio).
edA-qa mort-ora-y
1
No puedo pensar en una sola situación en la que la bifurcación en un sistema de 'repositorio completo' no exprese mejor el estado requerido que confiar en un estado externo al VCS para determinar qué archivos usar en un VCS "por archivo". Mi primer trabajo después de uni usé RCS, un montón de scripts para versionar el proyecto y un script de nivel superior para versionar los scripts de versión, una pesadilla absoluta, y sí, eso también fue para un proyecto militar. * 8 ')
Mark Booth
@ Mark Booth, el cliente sabía qué archivos se modificaron y qué arreglos querían. Entonces, la auditoría de configuración física fue por número de control de versión
Tim Williscroft
Lo que digo es que una versión + un parche auditado requiere información diferente en diferentes lugares, el VCS y los auditores. Con una rama en el sistema 'repositorio completo', esos dos estados se registran como entidades separadas. Ahora la misma información se duplica entre el VCS y el sistema de auditoría, y siempre debe coincidir. gitincluso puede diferenciar entre autor y confirmador, para que pueda mantener un repositorio 'auditado' en el que sepa quién creó el parche (el autor) y quién lo auditó (el confirmador). Bríndenos una situación ejemplar y revertiré mi -1.
Mark Booth
@Mark stand ¿qué parches? sabían que su software era este conjunto de archivos A 1.01 B 1.05 D 1.55 E 1.44 F 1.01 y la SVD para la versión que aceptaron tenía información de cambio archivo por archivo, por ejemplo, E cambió para corregir el defecto 1104, versión anterior 1.43, nueva versión 1.44 . Que Dios nos ayude si hubiéramos cambiado F de la versión 1.01. La situación era aún más complicada porque había errores reales que se solucionaron, para los que no querían cambios. Estas personas querían el conjunto mínimo de cambios, para recoger solo algunas características seleccionadas de un año de desarrollo. Selección de corrección de errores post-hoc.
Tim Williscroft
3

No hay ninguna ventaja para el versionado por archivo.

Las desventajas, por otro lado, son abundantes y manifiestas.

William Payne
fuente
0

Podría decir que los sistemas de control de versiones "por archivo" no tienen ninguna ventaja clara aparte de la implementación del VCS. Los codificadores de VCS estarían encantados de codificar cuando se tratara de una versión "por archivo". Estoy de acuerdo con el punto de que surgió históricamente.

Arvind Chinniah
fuente
0

No hay ninguna ventaja en el enfoque por archivo cuando tiene archivos relacionados. Cuál es el caso más común en una configuración de desarrollo.

En algunos casos peculiares - / etc o. Los archivos en su directorio de inicio en Unix son los únicos que tengo habitualmente: está manejando (en su mayoría) archivos no relacionados. Y luego tener un sistema que insiste en mantener sincronizados los cambios no relacionados puede ser una molestia.

Un programador
fuente