Git no es mejor que Subversion. Pero tampoco es peor. Es diferente.
La diferencia clave es que está descentralizada. Imagine que es un desarrollador en el camino, desarrolla en su computadora portátil y desea tener el control de fuente para poder retroceder 3 horas.
Con Subversion, tiene un problema: el repositorio SVN puede estar en una ubicación que no puede alcanzar (en su empresa, y no tiene Internet en este momento), no puede comprometerse. Si desea hacer una copia de su código, literalmente debe copiarlo / pegarlo.
Con Git, no tienes este problema. Su copia local es un repositorio, y puede comprometerse con ella y obtener todos los beneficios del control de código fuente. Cuando recupera la conectividad con el repositorio principal, puede comprometerse contra él.
Esto se ve bien al principio, pero solo tenga en cuenta la complejidad adicional de este enfoque.
Git parece ser la cosa "nueva, brillante, genial". De ninguna manera es malo (después de todo, hay una razón por la que Linus lo escribió para el desarrollo del Kernel de Linux), pero siento que muchas personas se suben al tren de "Control de fuente distribuida" solo porque es nuevo y está escrito por Linus Torvalds, sin realmente sabiendo por qué / si es mejor.
Subversion tiene problemas, pero también Git, Mercurial, CVS, TFS o lo que sea.
Editar: Entonces, esta respuesta ahora tiene un año y todavía genera muchos votos a favor, por lo que pensé agregar algunas explicaciones más. En el último año desde que escribí esto, Git ha ganado mucho impulso y apoyo, particularmente desde que sitios como GitHub realmente despegaron. Estoy usando Git y Subversion hoy en día y me gustaría compartir algunas ideas personales.
En primer lugar, Git puede ser realmente confuso al principio cuando se trabaja descentralizado. ¿Qué es un control remoto? y ¿Cómo configurar correctamente el repositorio inicial? Hay dos preguntas que surgen al principio, especialmente en comparación con el simple "svnadmin create" de SVN, el "git init" de Git puede tomar los parámetros --bare y --compartido, lo que parece ser la forma "adecuada" de configurar un sistema centralizado. repositorio. Hay razones para esto, pero agrega complejidad. La documentación del comando "checkout" es muy confusa para las personas que cambian: la forma "correcta" parece ser "git clone", mientras que "git checkout" parece cambiar de rama.
Git REALMENTE brilla cuando estás descentralizado. Tengo un servidor en casa y una computadora portátil en el camino, y SVN simplemente no funciona bien aquí. Con SVN, no puedo tener control de fuente local si no estoy conectado al repositorio (Sí, sé sobre SVK o sobre formas de copiar el repositorio). Con Git, ese es el modo predeterminado de todos modos. Sin embargo, es un comando adicional (git commit se compromete localmente, mientras que git push origin master empuja la rama maestra al control remoto llamado "origin").
Como se dijo anteriormente: Git agrega complejidad. Dos modos de crear repositorios, pago versus clonación, confirmación vs. inserción ... Debe saber qué comandos funcionan localmente y cuáles funcionan con "el servidor" (supongo que a la mayoría de la gente todavía le gusta un "repositorio maestro" central )
Además, las herramientas siguen siendo insuficientes, al menos en Windows. Sí, hay un complemento de Visual Studio, pero todavía uso git bash con msysgit.
SVN tiene la ventaja de que es MUCHO más fácil de aprender: existe su repositorio, todos los cambios hacia él, si sabe cómo crear, confirmar y pagar y está listo para comenzar y puede recoger cosas como ramificación, actualización, etc. más adelante en.
Git tiene la ventaja de que es MUCHO más adecuado si algunos desarrolladores no siempre están conectados al repositorio maestro. Además, es mucho más rápido que SVN. Y por lo que escuché, el soporte de ramificación y fusión es mucho mejor (lo cual es de esperar, ya que estas son las razones principales por las que fue escrito).
Esto también explica por qué gana tanto revuelo en Internet, ya que Git es perfectamente adecuado para proyectos de código abierto: simplemente bifurca, confirma tus cambios en tu propia bifurcación y luego pide al encargado del proyecto original que extraiga tus cambios. Con Git, esto simplemente funciona. Realmente, pruébalo en Github, es mágico.
Lo que también veo son puentes Git-SVN: el repositorio central es un repositorio de Subversion, pero los desarrolladores trabajan localmente con Git y el puente empuja sus cambios a SVN.
Pero incluso con esta larga adición, aún mantengo mi mensaje central: Git no es mejor ni peor, es simplemente diferente. Si tiene la necesidad de "Control de fuente fuera de línea" y la voluntad de pasar un tiempo extra aprendiéndolo, es fantástico. Pero si tiene un control de origen estrictamente centralizado y / o tiene dificultades para introducir el control de origen en primer lugar porque sus compañeros de trabajo no están interesados, entonces la simplicidad y las excelentes herramientas (al menos en Windows) de SVN brillan.