¿Cuál es mejor, SVN o Git?

Habiendo usado ambos bastante recientemente, creo que git es en general mejor:

  1. La razón más importante es la ramificación local barata. Hace que sea mucho más razonable trabajar en varias cosas en paralelo sin cometer tantos errores.
  2. Git también es más rápido en mi experiencia, lo que mejora la productividad. Entiendo por qué esto se debe a que habla menos con el servidor (básicamente solo cuando se hace un git push o git pull).
  3. En general, también hay mejores herramientas para hacer cosas, por ejemplo, git bisect hace que la depuración de algunos problemas no obvios sea mucho más fácil.
  4. El hecho de que tengas toda la historia del árbol siempre es útil si trabajas sin conexión a Internet, aunque eso es bastante raro hoy en día, así que no creo que sea tan importante.

Las 3 cosas que creo que son mejores acerca de svn son:

  1. Números de revisión global que son secuenciales. Es mucho más fácil entender esto.
  2. Ser capaz de ver subárboles. Esto es realmente agradable a veces. Tenemos un gran árbol de fuentes en git en este momento, por lo que si desea verificarlo, obtiene * todo el tiempo *, lo que podría ser doloroso a medida que crece la cantidad de código.
  3. svn externos. A veces son útiles, y no conozco una forma de hacer algo similar tan fácilmente en git (aunque definitivamente hay formas de lograr lo mismo).

En general, creo que las ventajas de git ganan en casi todos los casos.

El usuario de Quora señala que http://whygitisbetterthanx.com/#svn es un gran recurso sobre este tema.

Un gran sitio, con muchos ejemplos de por qué git es mejor que svn: http://whygitisbetterthanx.com/#svn

Según mi experiencia, en realidad solo hay dos razones por las que SVN sería mejor que git:

  • Hay mejores interfaces gráficas de usuario para SVN (un producto que dura más tiempo)
  • La base de código existente en SVN sería dolorosa de migrar y no planea realizar muchos cambios, mientras que otros que están muy familiarizados con SVN continúan usándola.

[publicación original aquí]

¡Oye! Mi colega acaba de escribir un artículo relacionado con esta pregunta. Puede consultar la publicación original (vinculada en la parte superior) o seguir leyendo.

➔ Diferencias entre Git y SVN

Una de las diferencias más notables al cambiar a Git es su velocidad. Dado que todo el repositorio se almacena localmente en la máquina del desarrollador, él o ella puede trabajar durante días con una conexión a Internet muy pobre. Crear sucursales es muy rápido debido a la implementación de sucursales de Git. En Git, una rama es simplemente una referencia a una confirmación, donde se adjuntarán las siguientes confirmaciones. Ni siquiera contiene información básica como la fecha de creación, el usuario que la creó o algún tipo de mensaje.

Dado que Git alienta el uso de sucursales, no podemos olvidar dar un reconocimiento a sus capacidades de fusión. SVN antes de la versión 1.5 solo hacía fusiones bidireccionales que implicaban un conjunto de cambios aplicado a la base de código actual, porque no almacenaba información de fusión. Git usa el historial del repositorio para identificar la base común entre las ramas fusionadas y solo necesita fusionarse desde donde divergieron, completando así una fusión tripartita. SVN también está mejorando y ha admitido la fusión tripartita desde 1.5. En la próxima versión 1.9 de SVN, también tendrá un mejor cambio de nombre / movimiento de archivos, algo que Git ya hace.

➔ Integración con otro software

SVN ha funcionado durante más de 15 años y gracias a su popularidad se ha integrado en la mayoría de los servidores de integración, sistemas de seguimiento de problemas, IDE y otros. Al considerar las diferencias entre Git y SVN, a pesar de ser 5 años más joven que SVN, Git no se queda atrás. Es fácil integrarlo con otro software. Git proporciona solo herramientas de línea de comandos, pero muchas compañías han creado varias UI además de SourceTree, Github, Git Extensions de Atlassian y otras.

➔ Adoptando Git

Al sopesar las diferencias entre Git y SVN, Git ofrece pocas desventajas. Entre ellos está la curva de aprendizaje ligeramente más pronunciada, al menos al principio. Si los desarrolladores de un proyecto han trabajado solo con VCS centralizado, pueden enfrentar algunas ralentizaciones al navegar algunas de las diferencias, como el proceso de sincronización y el paso de preparación adicional al crear una confirmación. Como se mencionó, hay muchas aplicaciones GUI que pueden facilitar la vida de un desarrollador y, si es necesario, también proporcionan una interfaz de línea de comandos en caso de que se necesiten comandos más avanzados.

¿Todavía no está listo para cambiar a un repositorio de Git, pero aún quiere usar un enfoque de ramificación de características?

Git proporciona una herramienta llamada git-svn, que permite rastrear un repositorio Subversion estándar y proporciona un flujo bidireccional de cambios entre ellos. Tiene la capacidad de trabajar con ramas de características y sincronizarse con las ramas del repositorio SVN cuando lo necesite. Todo esto no afecta al equipo en absoluto, ya que solo el desarrollador sabe que está utilizando un repositorio Git localmente. Microsoft ha adoptado un enfoque similar con TFS. Han proporcionado una herramienta git-tf que permite rastrear un repositorio TFS. Sin embargo, de esta manera, el modelo de rama de características no se utiliza en todo su potencial, ya que la gestión del proyecto no puede beneficiarse de él.

Las ramas de características proporcionan aislamiento y conveniencia. Gracias a la implementación interna de Git, la creación de sucursales, una de las operaciones costosas en SVN, es básicamente “gratuita”. Esto permite la creación instantánea y la limpieza de las sucursales temporales para crear nuevas funciones.