tag - ¿Debo usar SVN o Git?
qué tipos de etiquetas existen en git (21)
¿Has probado Bazaar ?
Es bastante bueno, connónico (la gente que hace Ubuntu) lo hizo porque no les gustaba nada más en el mercado ...
Estoy empezando un nuevo proyecto distribuido. ¿Debo usar SVN o Git, y por qué?
¿Puedo ampliar la pregunta y preguntar si Git funciona bien en MacOS?
Respuesta a los comentarios: Gracias por la noticia, tenía muchas ganas de probarlo. Lo instalaré en casa en mi Mac.
2 ventajas clave de SVN que rara vez se citan:
Soporte de archivos grandes. Además del código, uso SVN para administrar mi directorio de inicio. SVN es el único VCS (distribuido o no) que no se atraganta con mis archivos TrueCrypt (corríjame si hay otro VCS que maneje archivos de 500MB + de manera efectiva). Esto se debe a que las comparaciones de diferencias se transmiten (este es un punto muy esencial). Rsync es inaceptable porque no es bidireccional.
Depósito parcial (subdir) checkout / checkin. Mercurial y bzr no admiten esto, y el soporte de git es limitado. Esto es malo en un ambiente de equipo, pero invaluable si quiero revisar algo en otra computadora desde mi directorio de casa.
Solo mis experiencias.
Aquí hay una copia de una respuesta que hice de una pregunta duplicada desde entonces, que se eliminó sobre Git vs. SVN (septiembre de 2009).
¿Mejor? Aparte del enlace habitual WhyGitIsBetterThanX , son diferentes:
uno es un VCS central basado en una copia barata para sucursales y etiquetas, el otro (Git) es un VCS distribuido basado en un gráfico de revisiones. Véase también Conceptos básicos de VCS .
Esa primera parte generó algunos comentarios mal informados que pretenden que el propósito fundamental de los dos programas (SVN y Git) es el mismo, pero que se han implementado de manera muy diferente.
Para aclarar la diferencia fundamental entre SVN y Git , permítanme reformular:
SVN es la tercera implementación de un control de revisión : RCS, luego CVS y, finalmente, SVN administra directorios de datos versionados. SVN ofrece funciones de VCS (etiquetado y fusión), pero su etiqueta es solo una copia del directorio (como una rama, excepto que no se "supone" que toque nada en un directorio de etiquetas), y su combinación aún es complicada, actualmente se basa en meta -datos añadidos para recordar lo que ya se ha fusionado.
Git es una gestión de contenido de archivos (una herramienta creada para combinar archivos), evolucionó a un verdadero Sistema de Control de Versiones , basado en un DAG ( Gráfico Acíclico Dirigido ) de confirmaciones, donde las ramas forman parte del historial de datos (y no un dato en sí). ), y donde las etiquetas son un verdadero metadatos.
Decir que no son "fundamentalmente" diferentes porque puede lograr lo mismo, resolver el mismo problema, es ... simplemente falso en muchos niveles.
- Si tiene muchas combinaciones complejas, hacerlas con SVN será más largo y más propenso a errores. Si tiene que crear muchas sucursales, deberá administrarlas y combinarlas, de nuevo mucho más fácilmente con Git que con SVN, especialmente si se trata de un gran número de archivos (la velocidad se vuelve importante)
- Si tiene fusiones parciales para un trabajo en progreso, aprovechará el área de preparación de Git (índice) para cometer solo lo que necesita, esconder el resto y continuar en otra rama.
- Si necesita desarrollo sin conexión ... bueno, con Git siempre está "en línea", con su propio repositorio local, independientemente del flujo de trabajo que desee seguir con otros repositorios.
Aún así los comentarios sobre esa vieja (eliminada) respuesta insistieron:
VonC: Usted está confundiendo la diferencia fundamental en la implementación (las diferencias son muy fundamentales, ambos estamos de acuerdo en esto) con la diferencia en el propósito.
Ambas son herramientas usadas para el mismo propósito: es por eso que muchos equipos que anteriormente usaron SVN han sido capaces de volcarlo a favor de Git.
Si no resolvieran el mismo problema, esta posibilidad de sustitución no existiría.
, a lo que respondí:
"sustituibilidad" ... término interesante ( utilizado en la programación de computadoras ).
Por supuesto, Git no es un subtipo de SVN.
Puede lograr las mismas características técnicas (etiqueta, rama, combinación) con ambas, pero Git no se interpone en su camino y le permite concentrarse en el contenido de los archivos , sin pensar en la herramienta en sí.
Ciertamente no puede (siempre) simplemente reemplazar SVN por Git "sin alterar ninguna de las propiedades deseables de ese programa (corrección, tarea realizada, ...)" (que es una referencia a la definición de sustituibilidad mencionada anteriormente):
- Una es una herramienta de revisión extendida, la otra es un verdadero sistema de control de versiones.
- Uno es adecuado para proyectos monolíticos pequeños a medianos con flujo de trabajo de fusión simple y (no demasiado) versiones paralelas. SVN es suficiente para ese propósito, y es posible que no necesites todas las funciones de Git.
- El otro permite proyectos medianos a grandes basados en múltiples componentes ( un repositorio por componente ), con una gran cantidad de archivos que se fusionan entre múltiples ramas en un flujo de trabajo de combinación complejo, versiones paralelas en ramas, combinaciones de reacondicionamiento, etc. Puedes hacerlo con SVN, pero estás mucho mejor con Git.
SVN simplemente no puede administrar ningún proyecto de cualquier tamaño con cualquier flujo de trabajo de combinación. Git puede.
Una vez más, su naturaleza es fundamentalmente diferente (lo que luego lleva a una implementación diferente, pero ese no es el punto).
Uno ve el control de revisión como directorios y archivos, el otro solo ve el contenido del archivo (¡tanto que los directorios vacíos ni siquiera se registran en Git!).
El objetivo final general puede ser el mismo, pero no puede usarlos de la misma manera, ni puede resolver la misma clase de problema (en alcance o complejidad).
Definitivamente svn
, ya que Windows es, en el mejor de los casos, un ciudadano de segunda clase en el mundo de git
(consulte http://en.wikipedia.org/wiki/Git_(software)#Portability ) http://en.wikipedia.org/wiki/Git_(software)#Portability para obtener más detalles).
ACTUALIZACIÓN: Perdón por el enlace roto, pero he desistido de intentar que SO funcione con URI que contienen paréntesis. [enlace arreglado ahora. -ed]
El punto principal es que Git es un VCS distribuido y Subversion un centralizado. Los VCS distribuidos son un poco más difíciles de entender, pero tienen muchas ventajas. Si no necesita estas ventajas, Subversion puede ser la mejor opción.
Otra pregunta es la herramienta de apoyo. ¿Qué VCS es mejor soportado por las herramientas que planea usar?
EDIT: Hace tres años respondí de esta manera:
Y Git funciona en Windows en este momento solo a través de Cygwin o MSYS . Subversion soporta Windows desde el principio. Como las soluciones de git para Windows pueden funcionar para usted, puede haber problemas, ya que la mayoría de los desarrolladores de Git trabajan con Linux y no tenían portabilidad en la mente desde el principio. En este momento preferiría Subversion para desarrollo bajo Windows. En pocos años esto puede ser irrelevante.
Ahora el mundo ha cambiado un poco. Git tiene una buena implementación en Windows ahora. Aunque no probé a fondo en Windows (como ya no uso este sistema), estoy bastante seguro de que todos los VCS principales (SVN, Git, Mercurial, Bazaar) tienen la implementación correcta de Windows ahora. Esta ventaja para SVN se ha ido. Los otros puntos (Centralizados vs. Distribuidos y la verificación de soporte de herramientas) permanecen válidos.
Git no es compatible de forma nativa con Windows, por el momento. Está optimizado para los sistemas Posix. Sin embargo, ejecutar Cygwin o MinGW le permite ejecutar Git correctamente.
Hoy en día prefiero Git en lugar de SVN, pero te lleva un tiempo superar el umbral si vienes de CVS, SVN land.
Hay un video interesante en YouTube sobre esto. Es del propio Linus Torwalds: Goolge Tech Talk: Linus Torvalds en git
He usado SVN durante mucho tiempo, pero siempre que usé Git, sentí que Git es muy poderoso, liviano y, aunque conlleva un poco de curva de aprendizaje, es mejor que SVN.
Lo que he notado es que cada proyecto SVN, a medida que crece, se convierte en un proyecto de gran tamaño a menos que se exporte. Donde, el proyecto GIT (junto con los datos de Git) es muy ligero en tamaño.
En SVN, he tratado con desarrolladores desde principiantes hasta expertos, y los principiantes e intermedios parecen introducir conflictos de archivos si copian una carpeta de otro proyecto SVN para reutilizarla. Mientras que, creo que en Git, simplemente copia la carpeta y funciona, porque Git no introduce carpetas .git en todas sus subcarpetas (como lo hace SVN).
Después de trabajar mucho con SVN desde hace mucho tiempo, finalmente estoy pensando en trasladar a mis desarrolladores y a mí a Git, ya que es fácil colaborar y fusionar trabajo, y una gran ventaja es que los cambios de una copia local se pueden comprometer tanto deseado, y luego finalmente enviado a la rama en el servidor de una sola vez, a diferencia de SVN (donde tenemos que confirmar los cambios de vez en cuando en el repositorio en el servidor).
¿Alguien que pueda ayudarme a decidir si realmente debería ir con Git?
Lo gracioso es que: recibo proyectos en Subversion Repos, pero accedo a ellos a través del comando Git Clone.
Por favor, lea Desarrollar con Git en un proyecto de Google Code
Aunque Google Code habla de forma nativa a Subversion, puedes usar Git fácilmente durante el desarrollo. La búsqueda de "git svn" sugiere que esta práctica está muy extendida, y también le recomendamos que experimente con ella.
Usar Git en un repositorio Svn me da beneficios:
- Puedo trabajar distribuido en varias máquinas, comprometiéndome y tirando de ellas.
- Tengo un repositorio central de svn
backup/public
para que otros puedan verlo - Y son libres de usar Git para su propio
Nunca he entendido este concepto de "git no es bueno en Windows"; Me desarrollo exclusivamente bajo Windows y nunca he tenido ningún problema con git.
Definitivamente recomendaría git sobre subversión; es simplemente mucho más versátil y permite el "desarrollo fuera de línea" de una manera que la subversión nunca podría realmente. Está disponible en casi todas las plataformas imaginables y tiene más funciones de las que probablemente nunca usará.
Optaría por SVN ya que está más difundido y es más conocido.
Supongo que Git sería mejor para el usuario de Linux.
Probablemente elegiría Git porque creo que es mucho más poderoso que SVN. Hay servicios baratos de Alojamiento de Código disponibles que funcionan muy bien para mí (no tienes que hacer copias de seguridad ni ningún trabajo de mantenimiento). GitHub es el candidato más obvio.
Dicho esto, no sé nada sobre la integración de Visual Studio y los diferentes sistemas SCM. Me imagino la integración con SVN notablemente mejor.
Realmente no respondo a tu pregunta, pero si quieres los beneficios del control de revisión distribuido ( parece que lo haces) y estás usando Windows, creo que sería mejor usar Mercurial lugar de que Git como Mercurial tenga un soporte de Windows mucho mejor. Mercurial también tiene un puerto Mac.
SVN es un repo y muchos clientes. Git es un repositorio con muchos repositorios de clientes, cada uno con un usuario. Se descentraliza hasta un punto en el que las personas pueden realizar un seguimiento de sus propias ediciones a nivel local sin tener que enviar elementos a un servidor externo.
SVN está diseñado para ser más central, ya que Git se basa en que cada usuario tiene su propio repositorio de Git y esos cambios de empuje de repos en uno central. Por esa razón, Git ofrece a los individuos un mejor control de la versión local.
Mientras tanto, puede elegir entre TortoiseGit , GitExtensions (y si aloja su repositorio de git "central" en github, su propio cliente - GitHub para Windows ).
Si está buscando salir de SVN, es posible que desee evaluar Bazaar un poco. Es uno de los sistemas de control de versiones de la próxima generación que tienen este elemento distribuido. No depende de POSIX como git, por lo que hay versiones nativas de Windows y algunas marcas de código abierto poderosas lo respaldan.
Pero es posible que ni siquiera necesites este tipo de características todavía. Eche un vistazo a las características, ventajas y desventajas de los VCS distribuidos . Si necesita más de las ofertas de SVN, considere una. Si no lo hace, es posible que desee seguir con la integración superior de escritorio de SVN (actualmente).
SVN parece ser una buena opción para Windows, como lo señalan otras personas.
Si alguno de sus desarrolladores quiere probar GIT, siempre puede usar GIT-SVN donde el repositorio de SVN se recrea en un repositorio de GIT. Entonces debería poder trabajar localmente con GIT y luego usar SVN para publicar sus cambios en el repositorio principal.
Si su equipo ya está familiarizado con los softwares de control de versión y fuente, como cvs o svn, entonces, para un proyecto simple y pequeño (como usted dice), le recomiendo que se limite a SVN. Estoy realmente cómodo con svn, pero para el proyecto de comercio electrónico actual que estoy haciendo en django, decidí trabajar en git (estoy usando git en modo svn, es decir, con un repositorio centralizado que presiono y jalo para colaborar con al menos otro desarrollador). El otro desarrollador se siente cómodo con SVN, y si bien las experiencias de otros pueden diferir, ambos estamos pasando un mal momento para aceptar este pequeño proyecto. (Ambos somos usuarios hardcore de Linux, si es que importa).
Su kilometraje puede variar, por supuesto.
Tienes que ir con un DVCS, es como un salto cuántico en la administración de la fuente. Personalmente uso Monotone y su tiempo de desarrollo acelerado no tiene fin. Lo estamos utilizando para Windows, Linux y Mac y ha sido muy estable. Incluso tengo buildbot haciendo compilaciones nocturnas del proyecto en cada una de las plataformas.
El DVCS mientras se distribuye generalmente significa que creará un servidor central solo para que las personas puedan enviar cambios hacia y desde.
Todo se reduce a esto:
¿Será tu desarrollo lineal? Si es así, debes seguir con Subversion.
Si, por otro lado, su desarrollo no será lineal, lo que significa que tendrá que crear una bifurcación para diferentes cambios, y luego fusionar dichos cambios en la línea de desarrollo principal (conocida por Git como la rama maestra), entonces Git lo hará. Mucho más para ti.
Después de investigar más y revisar este enlace: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
(Algunos extractos abajo):
- Es increíblemente rápido. Ningún otro SCM que he usado ha sido capaz de mantenerse al día, y he usado mucho, incluyendo Subversion, Perforce, darcs, BitKeeper, ClearCase y CVS.
- Está totalmente distribuido. El propietario del repositorio no puede dictar cómo trabajo. Puedo crear sucursales y confirmar cambios mientras estoy desconectado en mi computadora portátil, y luego sincronizarlo con cualquier número de otros repositorios.
- La sincronización puede ocurrir en muchos medios. Un canal SSH, a través de HTTP a través de WebDAV, por FTP o mediante el envío de correos electrónicos con parches para que los aplique el destinatario del mensaje. Un repositorio central no es necesario, pero puede ser utilizado.
- Las sucursales son incluso más baratas que en Subversion. Crear una rama es tan simple como escribir un archivo de 41 bytes en el disco. Eliminar una rama es tan simple como eliminar ese archivo.
- A diferencia de las ramas de Subversion llevan su historia completa. sin tener que realizar una copia extraña y recorrer la copia. Al usar Subversion, siempre me resultó incómodo mirar el historial de un archivo en la rama que ocurrió antes de que se creara la rama. de #git: spearce: No entiendo nada sobre SVN en la página. Hice una rama en SVN y, al explorar el historial, mostraba todo el historial de un archivo en la rama.
- La fusión de sucursales es más simple y más automática en Git. En Subversion, debe recordar cuál fue la última revisión de la que se fusionó para poder generar el comando de combinación correcto. Git hace esto automáticamente, y siempre lo hace bien. Lo que significa que hay menos posibilidades de cometer un error al fusionar dos ramas.
- Las combinaciones de sucursales se registran como parte de la historia adecuada del repositorio. Si fusiono dos ramas juntas, o si fusiono una rama nuevamente en el tronco del que proviene, esa operación de combinación se registra como parte de la historia del repostorio como realizada por mí, y cuándo. Es difícil disputar quién realizó la fusión cuando está justo ahí en el registro.
- Crear un repositorio es una operación trivial: mkdir foo; cd foo; git init Eso es todo. Lo que significa que creo un repositorio Git para todo estos días. Tiendo a usar un repositorio por clase. La mayoría de esos repositorios tienen menos de 1 MB en el disco, ya que solo almacenan apuntes, tareas y mis respuestas de LaTeX.
- Los formatos de archivo internos del repositorio son increíblemente simples. Esto significa que la reparación es muy fácil de hacer, pero incluso mejor porque es tan simple que es muy difícil corromperse. No creo que nadie haya tenido un repositorio Git corrompido. He visto subversión con fsfs corruptos. Y he visto que Berkley DB se ha corrompido demasiadas veces para confiar mi código al bdb backend de Subversion.
- El formato de archivo de Git es muy bueno para comprimir datos, a pesar de que es un formato muy simple. El repositorio CVS del proyecto Mozilla es de aproximadamente 3 GB; Se trata de 12 GB en formato fsfs de Subversion. En Git es alrededor de 300 MB.
Después de leer todo esto, estoy convencido de que Git es el camino a seguir (aunque existe un poco de curva de aprendizaje). También he usado Git y SVN en plataformas Windows.
¿Me encantaría escuchar lo que otros tienen que decir después de leer lo anterior?
Me gustaría configurar un repositorio Subversion. Al hacerlo de esta manera, los desarrolladores individuales pueden elegir si usar clientes Subversion o clientes Git (con git-svn
). El uso de git-svn
no le brinda todos los beneficios de una solución Git completa, pero le da a los desarrolladores individuales un gran control sobre su propio flujo de trabajo.
Creo que pasará relativamente poco tiempo antes de que Git funcione tan bien en Windows como en Unix y Mac OS X (ya que lo pidió).
Subversion tiene excelentes herramientas para Windows, como TortoiseSVN para la integración de Explorer y AnkhSVN para la integración de Visual Studio.