2011-10-23 20 views
9

Acabo de encontrar un proyecto de código abierto que todavía usa CVS. Me preguntaba si todavía había razones para preferir CVS sobre SVN o Git hoy en día. (¡No cuento demasiado perezoso para migrar como respuesta! ;-))Razones para preferir CVS sobre SVN o Git

¿El CVS tiene algo que los otros dos no tienen? Digamos, ¿soporte para $ OS o $ fancy_tool?

En "What are the advantages of using SVN over CVS?" hay respuestas elaboradas sobre por qué no usar CVS. Pero quiero preguntar al revés. CVS no puede ser tan malo. ¿O es eso?

Respuesta

21

Todavía uso CVS para algunas de mis cosas personales.

A diferencia de Git, puede verificar fácilmente solo un subconjunto del repositorio.

Y CVS asigna números de versión secuenciales (1.1, 1.2, 1.3, ...) a cada archivo. En Git, los números de versión son sumas de verificación hexadecimales de 40 caracteres. En SVN, los números de revisión son secuenciales en todo el repositorio; un número dado se aplica a todo el repositorio.

Y CVS le permite expandir los números de versión en cada archivo al verificarlo, lo que facilita identificar la versión de un archivo sin referencia al repositorio del que proviene.

Así que encuentro CVS (y algunas veces incluso RCS) conveniente cuando el repositorio es una colección de archivos en gran parte no relacionados, y estoy más interesado en rastrear cambios en archivos individuales, pero las revisiones del repositorio como un todo no son particularmente significativo.

(Eso no va a ser el caso si el repositorio contiene los archivos de origen utilizados para construir un solo programa o biblioteca;. En ese caso, que desea una historia coherente para el proyecto en su conjunto)

Por último, CVS almacena el historial de cada archivo en un solo archivo (con el mismo formato utilizado por RCS) con un formato relativamente directo. Al menos una vez, tuve que reconstruir manualmente un archivo CVS guardado que se había dañado. No estoy seguro de cómo podría haberlo hecho con SVN o Git.

ACTUALIZACIÓN: Esta pregunta ha sacado un par de downvotes inexplicables. Solo puedo adivinar las razones (y no me preocupa mucho el vástago ocasional), pero tal vez algunos lectores piensen que defiendo CVS como un mejor sistema que SVN o Git. No soy; Simplemente estoy señalando que CVS puede tener algunas ventajas en algunas circunstancias bastante estrechas.

4

Lo único que he encontrado en mi uso limitado de CVS es que CVS trata ramas y etiquetas como diferentes y también las trata como lo que son y no como simples carpetas que hace SVN. Existen comandos específicos para estos y se los trata como ciudadanos de primera clase del sistema de control de versiones. ¿Cómo se crea una rama en SVN? svn copy. ¿Etiqueta? mismo. ¿Cuál es la diferencia? Nada realmente, excepto cómo los tratas. Si bien se puede decir que el modelo de SVN conduce a la simplicidad, hace que varias herramientas las malinterpreten y no capten el contexto de las carpetas. Si ves a Git, es similar a CVS de esta manera.

Pero, definitivamente, no hay razón para usar CVS ahora, aparte de los motivos heredados. Muchos dicen que SVN fue construido para ser un mejor CVS y en casi todos los aspectos SVN es mejor y es ampliamente utilizado.

6

Tienes que entender que Subversion se escribió para reemplazar directamente a CVS y los problemas que los desarrolladores tienen con CVS. Se escribió Subversion, por lo que los usuarios de CVS podrían pasar fácilmente de CVS a Subversion, ya que utilizan el mismo flujo de trabajo y muchos conceptos similares.

Esto es como preguntar cómo era MS-DOS superior a Windows como sistema operativo. Podría encontrar algunas razones falsas ("Bueno ... ... eh ... MS-DOS necesita menos memoria."). Pero, al final, Windows se escribió para encargarse de las deficiencias de MS-DOS.

Algunas razones por las que es mejor CVS a Subversion simplemente no se sostienen una vez que entienda el razonamiento:

  • En CVS, las etiquetas y ramas fueron dos concepto totalmente diferente. En realidad, no había mucha diferencia entre una etiqueta o una rama. En el archivo CVS ,v, las ramas y las etiquetas se asociaron a revisiones particulares al principio del archivo. De hecho, utilizó el mismo comando: cvs tag para crear una rama o una etiqueta. Es una de las razones por las que Subversion no hizo una distinción entre los dos conceptos. Sin embargo, al tratar ramas y etiquetas por igual, Subversion sí le dio una forma de seguir el historial de una rama o etiqueta. ¿Quién lo creó y cuándo? ¿En qué revisión se basó? ¿Se cambió? Subversion también le brinda una manera fácil de ver todas las etiquetas o sucursales en su repositorio. En CVS, debe pasar por todos y cada uno de los archivos.
  • CVS es más flexible que Subversion porque Subversion lo obliga más o menos a trabajar en directorios completos. En CVS, puede verificar de aquí para allá, realizar los cambios y luego etiquetarlos todos a la vez. Por supuesto, esta es una manera de trabajar realmente mala, terrible, horrible y peligrosa. Lo que generalmente ocurre es que se le pide que haga una compilación basada en una etiqueta antigua, pero luego agregue esta media docena de cambios en el archivo. Luego, cree una nueva etiqueta. La diversión y la emoción ocurren cuando intentas seguir estas instrucciones. ¿Hizo la nueva etiqueta en la revisión 1.3.4.2.3.2.5.2 o 1.3.2.4.3.2.5.2?
  • CVS le permite tener escaso etiquetado y ramificación. Puede tener una etiqueta base y luego agregar otras etiquetas además de eso. Por supuesto, la razón por la que la mayoría de los sitios hizo esto es porque podría llevar horas ramificar o etiquetar un repositorio de CVS realmente grande. Subversion hace lo mismo en un microsegundo.
  • CVS utiliza el formato de archivo RCS estándar, por lo que puede solucionar problemas en su repositorio. Sin embargo, la mayoría de las veces, terminas creando más problemas de los que estás solucionando.

CVS fue una gran mejora sobre RCS. En CVS, no tenía que bloquear un archivo antes de cambiarlo. En CVS, puede verificar subárboles enteros sin escribir algún tipo de interfaz de sistema. RCS fue desarrollado para versionar archivos individuales. CVS versionó su repositorio completo como un único proyecto.

RCS en sí mismo fue una mejora en SCCS. El formato del repositorio RCS fue más fácil de entender. La expansión de palabras clave funcionó mejor y fue menos críptica. Podrías tener ramas de ramas mientras que SCCS te dejó con un solo nivel de rama. RCS tenía el concepto integrado de etiquetas, mientras que SCCS le exigía que rastreara las etiquetas usted mismo.

Y SCCS era mucho mejor que no usar un repositorio fuente en absoluto.

La verdad es que CVS ha sido reemplazado por Subversion, ya que Subversion salió hace más de una década, todo el trabajo en CVS se ha detenido. Ni siquiera creo que los errores se solucionen más en CVS.

-1

CVS, git y subversion tienen diferentes diseños de flujo de trabajo. Es inexacto y engañoso decir (git/subversion se diseñó para solucionar problemas con cvs). Más bien, se escribió subversión, porque alguien quería un flujo de trabajo diferente del que CVS/RCS funciona mejor. Y luego se escribió git porque alguien quería otro flujo de trabajo diferente.

superficialmente, la subversión y el CVS son algo similares. Pasando de la memoria, CVS es bueno para aquellas personas que les gusta usar RCS en su repositorio de código local. RCS es bueno ya que requiere la extracción obligatoria de un archivo. Le hace saber explícitamente a qué archivos está tocando en un momento dado. Por lo tanto, evita que "accidentalmente" toque la parte del código de otra persona.

+0

Downvoting porque, como diría Luke Skywalker, "Sorprendente. Cada palabra de eso estaba mal". –

+0

wow. impresionante. me has deslumbrado con tus datos y tu lógica. con lo que quiero decir, usted escribió CERO hechos y lógica, pero downvoted de todos modos. ¿Incluso ha utilizado CVS y RCS para trabajar de manera sostenida? He usado los 3: CVS, RCS y subversión, en proyectos extendidos, para el trabajo. –

+0

Sí, he usado tanto CVS como SVN en proyectos de trabajo. ¿Quieres una lista de los errores que cometiste? Aqui tienes. "Es inexacto y engañoso decir (git/subversion se diseñó para solucionar problemas con cvs)". INCORRECTO. SVN fue diseñado explícitamente para ser un mejor CVS (es decir, para solucionar problemas con CVS, pero principalmente funciona de manera similar). Git, OTOH, * fue * diseñado para un flujo de trabajo diferente. • "Pasando de la memoria, CVS es bueno para las personas que les gusta usar RCS en su repositorio de código local". INCORRECTO. CVS usa archivos RCS como su formato de almacenamiento de datos, pero no funciona como RCS. –

Cuestiones relacionadas