que - diferencias entre git y svn
Razones para preferir CVS sobre SVN o Git (4)
Lo único que he encontrado en mi uso limitado de CVS es que CVS trata las ramas y las etiquetas como diferentes y también las trata como lo que son y no como simples carpetas que 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 ninguna razón para usar CVS hoy en día, 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.
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! ;-))
¿CVS tiene algo que los otros dos carecen? Digamos, ¿soporte para $ OS o $ fancy_tool?
En " ¿Cuáles son las ventajas de usar SVN sobre 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?
Debe comprender 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 CVS es mejor para Subversion simplemente no se sostienen una vez que comprendes el razonamiento:
- En CVS, las etiquetas y las ramas eran dos conceptos completamente diferentes. En realidad, no había mucha diferencia entre una etiqueta o una rama. En el CVS
,v
archivo,v
, las ramas y las etiquetas eran alias 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 de archivos. 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.
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). Por el contrario, la subversión se escribió 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. Volviendo de la memoria, CVS es bueno para las 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.
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 la identificación de 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 significativas.
(Ese no será el caso si el repositorio contiene archivos fuente usados para construir un solo programa o biblioteca, en ese caso, desea una historia coherente para el proyecto como un todo).
Finalmente, 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 votos negativos 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.