svn tortoise ¿Por qué Git es mejor que Subversion?




tortoise svn (24)

He estado usando Subversion por algunos años y después de usar SourceSafe , me encanta Subversion. Combinado con TortoiseSVN , realmente no puedo imaginar cómo podría ser mejor.

Sin embargo, hay un número creciente de desarrolladores que afirman que Subversion tiene problemas y que deberíamos estar cambiando a la nueva generación de sistemas de control de versiones distribuidos, como Git .

¿Cómo mejora Git en Subversion?


Me gusta Git porque en realidad ayuda a los desarrolladores de comunicación a desarrollar en un equipo mediano a grande. Como un sistema de control de versiones distribuido, a través de su sistema push / pull, ayuda a los desarrolladores a crear un ecosistema de código fuente que ayuda a administrar un gran grupo de desarrolladores que trabajan en un solo proyecto.

Por ejemplo, digamos que confías en 5 desarrolladores y solo extraes códigos de su repositorio. Cada uno de esos desarrolladores tiene su propia red de confianza desde donde extraen los códigos. Por lo tanto, el desarrollo se basa en el tejido de confianza de los desarrolladores donde la responsabilidad del código se comparte entre la comunidad de desarrollo.

Por supuesto, hay otros beneficios que se mencionan en otras respuestas aquí.


Todas las respuestas aquí son las esperadas, centradas en el programador; sin embargo, ¿qué sucede si su empresa utiliza el control de revisión fuera del código fuente? Hay muchos documentos que no son código fuente que se benefician del control de versiones y que deben estar cerca del código y no en otro CMS. La mayoría de los programadores no trabajan de forma aislada, trabajamos para empresas como parte de un equipo.

Teniendo eso en cuenta, compare la facilidad de uso, tanto en las herramientas del cliente como en la capacitación, entre Subversion y git. No puedo ver un escenario en el que cualquier sistema de control de revisión distribuido sea más fácil de usar o explicar a un no programador. Me encantaría estar equivocado, porque entonces sería capaz de evaluar git y, de hecho, tener la esperanza de que lo acepten personas que necesitan un control de versiones que no son programadores.

Incluso entonces, si la administración me pregunta por qué deberíamos pasar de un sistema de control de revisión centralizado a uno distribuido, me sería muy difícil dar una respuesta honesta, porque no la necesitamos.

Descargo de responsabilidad: Me interesé en Subversion desde el principio (alrededor de v0.29), por lo que obviamente soy parcial, pero las empresas en las que he trabajado desde entonces se están beneficiando de mi entusiasmo porque he alentado y apoyado su uso. Sospecho que esto es lo que ocurre con la mayoría de las compañías de software. Con tantos programadores que se suben al carro de git, me pregunto cuántas empresas se van a perder los beneficios de usar el control de versiones fuera del código fuente. Incluso si tiene sistemas separados para diferentes equipos, está perdiendo algunos de los beneficios, como la integración de seguimiento de problemas (unificados), al tiempo que aumenta los requisitos de mantenimiento, hardware y capacitación.


Subversion sigue siendo un sistema de control de versiones mucho más utilizado, lo que significa que tiene un mejor soporte de herramientas. Encontrará complementos SVN maduros para casi cualquier IDE , y hay buenas extensiones de explorador disponibles (como TurtoiseSVN). Aparte de eso, tendré que estar de acuerdo con Michael : Git no es mejor o peor que Subversion, es diferente.


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 de Svn me da beneficios:

  1. Puedo trabajar distribuido en varias máquinas, comprometiéndome y tirando de ellas.
  2. Tengo un repositorio central de svn backup/public para que otros puedan verlo
  3. Y son libres de usar Git para su propio


Para las personas que buscan una buena GUI de Git, Syntevo SmartGit puede ser una buena solución. Su propiedad, pero gratuita para uso no comercial, se ejecuta en Windows / Mac / Linux e incluso soporta SVN usando algún tipo de puente git-svn, creo.


Creo que Subversion está bien ... hasta que empieces a fusionar ... o hacer algo complicado ... o hacer algo que Subversion cree que es complicado (como hacer consultas para descubrir qué ramas se han desordenado con un archivo en particular, de dónde proviene un cambio, detectar copias y pegar) , etc) ...

No estoy de acuerdo con la respuesta ganadora, diciendo que el principal beneficio de GIT es el trabajo fuera de línea; es ciertamente útil, pero es más como un extra para mi caso de uso. SVK también puede trabajar fuera de línea, aún así no tengo dudas en cuál invertir mi tiempo de aprendizaje).

Es solo que es increíblemente potente y rápido y, bien, después de acostumbrarse a los conceptos, muy útil (sí, en ese sentido: fácil de usar).

Para obtener más detalles sobre una historia de fusión, vea esto: ¿ Usar git-svn (o similar) * solo * para ayudar con una svn merge?


Git y DVCS en general son geniales para los desarrolladores que hacen mucha codificación independientemente unos de otros porque cada uno tiene su propia rama. Sin embargo, si necesita un cambio de otra persona, ella tiene que comprometerse con su representante local y luego debe enviar ese cambio a usted o usted debe retirárselo.

Mi propio razonamiento también me hace pensar que DVCS hace las cosas más difíciles para el control de calidad y la administración de lanzamientos si haces cosas como lanzamientos centralizados. Alguien tiene que ser responsable de hacer ese empuje / extracción desde el repositorio de todos los demás, resolver cualquier conflicto que se haya resuelto en el momento de la confirmación inicial antes, luego hacer la compilación y luego hacer que todos los otros desarrolladores vuelvan a sincronizar sus repositorios.

Todo esto se puede abordar con procesos humanos, por supuesto; DVCS acaba de romper algo que fue arreglado por el control de versiones centralizado para proporcionar algunas nuevas comodidades.


Git no es mejor que Subversion. Pero tampoco es peor. Es diferente.

La diferencia clave es que está descentralizado. Imagina que eres un desarrollador en el camino, que desarrollas en tu computadora portátil y quieres tener el control de la fuente para que puedas regresar durante 3 horas.

Con Subversion, tiene un problema: el repositorio de 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, tiene que copiarlo / pegarlo literalmente.

Con Git, no tienes este problema. Su copia local es un repositorio, y puede comprometerse y obtener todos los beneficios del control de código fuente. Cuando recupera la conectividad con el repositorio principal, puede comprometerse en su contra.

Esto se ve bien al principio, pero solo tenga en cuenta la complejidad agregada a este enfoque.

Git parece ser la cosa "nueva, brillante, fresca". De ninguna manera es malo (hay una razón por la cual Linus lo escribió para el desarrollo del Kernel de Linux después de todo), pero creo que mucha gente se sube al tren "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.

Edit: Entonces esta respuesta tiene ahora un año y todavía genera muchos upvotes, así que pensé que agregaría algunas explicaciones más. En el último año desde que escribí esto, Git ha ganado mucho impulso y apoyo, particularmente desde que los 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 de forma descentralizada. ¿Qué es un control remoto? y ¿Cómo configurar correctamente el repositorio inicial? son 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 --shared que parece ser la forma "correcta" de configurar una centralizada repositorio. Hay razones para esto, pero agrega complejidad. La documentación del comando "checkout" es muy confusa para las personas que cambian de lugar: la forma "adecuada" parece ser "clon git", 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 la carretera, 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 las formas de copiar el repositorio). Con Git, ese es el modo predeterminado de todos modos. Sin embargo, es un comando adicional (git se compromete a nivel local, mientras que git push origin master empuja la rama maestra al remoto llamado "origen").

Como se dijo anteriormente: Git agrega complejidad. Dos modos de crear repositorios, checkout frente a clonación, commit vs. push ... Debe saber qué comandos funcionan localmente y cuáles funcionan con "el servidor" (supongo que a la mayoría de las personas todavía les gusta un "repositorio principal" central ).

Además, las herramientas siguen siendo insuficientes, al menos en Windows. Sí, hay un complemento de Visual Studio, pero sigo usando git bash con msysgit.

SVN tiene la ventaja de que es MUCHO más sencillo de aprender: está su repositorio, todos los cambios hacia él, si sabe cómo crear, confirmar y pagar, está listo para comenzar y puede recoger cosas como bifurcar, actualizar, etc. más tarde en.

Git tiene la ventaja de que es MUCHO mejor si algunos desarrolladores no siempre están conectados al repositorio principal. Además, es mucho más rápido que SVN. Y por lo que he escuchado, el apoyo a la bifurcación y la fusión es mucho mejor (lo que es de esperar, ya que estas son las razones principales por las que se escribió).

Esto también explica por qué gana tanto entusiasmo en Internet, ya que Git se adapta perfectamente a los proyectos de código abierto: solo bifurque, confirme sus cambios en su propia Fork, y luego solicite al encargado del proyecto original que realice los cambios. Con Git, esto simplemente funciona. Realmente, pruébalo en Github, es mágico.

Lo que también veo son los puentes Git-SVN: el repositorio central es un repositorio de Subversion, pero los desarrolladores trabajan localmente con Git y el puente luego envía sus cambios a SVN.

Pero incluso con esta adición prolongada, aún mantengo mi mensaje central: Git no es mejor o peor, solo es diferente. Si tienes la necesidad de un "Control de fuente sin conexión" y la disposición a pasar un tiempo extra aprendiéndolo, es fantástico. Pero si tiene un control de fuente estrictamente centralizado y / o está luchando para introducir el control de fuente 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.


Git también hace que la ramificación y la fusión sean realmente fáciles. Subversion 1.5 acaba de agregar el seguimiento de fusión, pero Git sigue siendo mejor. Con Git se ramifica es muy rápido y barato. Hace que la creación de una rama para cada nueva característica sea más factible. Los repositorios Oh y Git son muy eficientes con espacio de almacenamiento en comparación con Subversion.


" Por qué Git es mejor que X " describe los diversos pros y contras de Git frente a otros SCM.

Brevemente:

  • Git rastrea contenido en lugar de archivos
  • Las ramas son ligeras y la fusión es fácil , y quiero decir realmente fácil .
  • Se distribuye, básicamente, cada repositorio es una rama. Es mucho más fácil de desarrollar al mismo tiempo y en colaboración que con Subversion, en mi opinión. También hace posible el desarrollo fuera de línea .
  • No impone ningún flujo de trabajo , como se ve en el sitio web vinculado anterior , hay muchos flujos de trabajo posibles con Git. Un flujo de trabajo de estilo Subversion es fácilmente imitado.
  • Los repositorios de Git son mucho más pequeños en tamaño de archivo que los repositorios de Subversion. Solo hay un directorio ".git", a diferencia de docenas de repositorios ".svn" (tenga en cuenta que Subversion 1.7 y versiones posteriores ahora usan un solo directorio como Git).
  • El área de preparación es impresionante, te permite ver los cambios que realizarás, los cambios parciales y varias otras cosas.
  • El ocultamiento es invaluable cuando haces un desarrollo "caótico", o simplemente quieres corregir un error mientras estás trabajando en otra cosa (en una rama diferente).
  • Puede volver a escribir el historial , lo cual es excelente para preparar conjuntos de parches y corregir sus errores ( antes de publicar los confirmaciones)
  • ... y mucho más.

Hay algunas desventajas:

  • No hay muchas buenas interfaces gráficas de usuario todavía. Es nuevo y Subversion ha existido por mucho más tiempo, por lo que es natural ya que hay algunas interfaces en desarrollo. Algunos buenos incluyen code.google.com/p/tortoisegit y GitHub para Mac .
  • Las verificaciones parciales / clones de repositorios no son posibles en este momento (leí que está en desarrollo). Sin embargo, hay soporte de submódulos. Git 1.7+ soporta pagos dispersos .
  • Puede que sea más difícil de aprender, aunque no encontré que este fuera el caso (hace aproximadamente un año). Git ha mejorado recientemente su interfaz y es bastante fácil de usar.

En el uso más simplista, Subversion y Git son casi lo mismo. No hay mucha diferencia entre:

svn checkout svn://foo.com/bar bar
cd bar
# edit
svn commit -m "foo"

y

git clone [email protected]:foo/bar.git
cd bar
# edit
git commit -a -m "foo"
git push

Donde Git realmente brilla es ramificarse y trabajar con otras personas.


Otras respuestas han hecho un buen trabajo al explicar las características principales de Git (que son excelentes). Pero también hay muchas formas de que Git se comporte mejor y ayude a mantener mi vida más sana. Estas son algunas de las pequeñas cosas:

  1. Git tiene un comando 'limpio'. SVN necesita desesperadamente este comando, considerando la frecuencia con la que descargará archivos adicionales en su disco.
  2. Git tiene el comando 'bisect'. Es agradable.
  3. SVN crea directorios .svn en cada carpeta (Git solo crea un directorio .git). Cada script que escriba, y cada grep que haga, tendrá que escribirse para ignorar estos directorios .svn. También necesita un comando completo ("svn exportar") solo para obtener una copia sensata de sus archivos.
  4. En SVN, cada archivo y carpeta puede provenir de una revisión o rama diferente. Al principio, suena bien tener esta libertad. Pero lo que esto significa en realidad es que hay un millón de maneras diferentes para que su pago local se pueda arruinar por completo. (por ejemplo, si "svn switch" falla a la mitad, o si ingresa un comando incorrecto). Y lo peor es que, si alguna vez te encuentras en una situación en la que algunos de tus archivos provienen de un lugar y otros de otro, el "estado svn" te dirá que todo es normal. Tendrá que hacer "información svn" en cada archivo / directorio para descubrir qué tan extrañas son las cosas. Si el "estado de git" le dice que las cosas son normales, entonces puede confiar en que las cosas son realmente normales.
  5. Tienes que decirle a SVN cada vez que muevas o borres algo. Git sólo lo resolverá.
  6. Ignorar la semántica es más fácil en Git. Si ignora un patrón (como * .pyc), se ignorará para todos los subdirectorios. (Pero si realmente quieres ignorar algo para un solo directorio, puedes). Con SVN, parece que no hay una manera fácil de ignorar un patrón en todos los subdirectorios.
  7. Otro elemento que implica ignorar archivos. Git hace posible que la configuración de "privado" ignore (usando el archivo .git / info / exclude), que no afectará a nadie más.

Una de las cosas sobre SubVersion que me molesta es que coloca su propia carpeta en cada directorio de un proyecto, mientras que git solo coloca una en el directorio raíz. No es un gran problema, pero pequeñas cosas como esa se suman.

Por supuesto, SubVersion tiene tortuga, lo cual es [generalmente] muy bueno.


http://subversion.wandisco.com/component/content/article/1/40.html

Creo que es bastante seguro decir que entre los desarrolladores, el SVN vs. El argumento de Git se ha estado librando desde hace algún tiempo, y cada uno tiene su propio punto de vista sobre cuál es mejor. Esto incluso se mencionó en las preguntas durante nuestro seminario web sobre Subversion en 2010 y más allá.

Hyrum Wright, nuestro Director de Código Abierto y el Presidente de Subversion Corporation habla sobre las diferencias entre Subversion y Git, junto con otros Sistemas de Control de Versiones Distribuidas (DVCS).

También habla sobre los próximos cambios en Subversion, como Working Copy Next Generation (WC-NG), que cree que hará que varios usuarios de Git vuelvan a convertir a Subversion.

Mire su video y háganos saber lo que piensa comentando en este blog o publicando en nuestros foros. El registro es simple y solo tomará un momento!


Subversion es muy facil de usar. Nunca he encontrado en los últimos años un problema o que algo no funcione como se esperaba. También hay muchas herramientas de GUI excelentes y el soporte para la integración de SVN es grande.

Con Git obtienes un VCS más flexible. Puede usarlo de la misma manera que SVN con un repositorio remoto donde confirma todos los cambios. Pero también puede usarlo casi sin conexión y solo enviar los cambios de vez en cuando al repositorio remoto. Pero Git es más complejo y tiene una curva de aprendizaje más pronunciada. Me encontré por primera vez comprometiéndome con sucursales equivocadas, creando sucursales indirectamente o recibiendo mensajes de error con poca información sobre el error y dónde debo buscar con Google para obtener mejores informaciones. Algunas cosas sencillas, como la sustitución de marcadores ($ Id $), no funcionan, pero GIT tiene un mecanismo de enganche y filtrado muy flexible para fusionar sus propios scripts y así obtener todas las cosas que necesita y más, pero necesita más tiempo y lectura de la documentación. ;)

Si trabaja casi sin conexión con su repositorio local, no tendrá una copia de seguridad si algo se pierde en su máquina local. Con SVN, la mayoría de las veces trabaja con un repositorio remoto que también es la misma vez que la copia de seguridad en otro servidor ... Git puede funcionar de la misma manera, pero este no era el objetivo principal de Linus para tener algo como SVN2. Fue diseñado para los desarrolladores del kernel de Linux y las necesidades de un sistema de control de versiones distribuido.

¿Es Git mejor que SVN? Los desarrolladores que necesitan solo un historial de versiones y un mecanismo de copia de seguridad tienen una vida buena y fácil con SVN. Los desarrolladores que trabajan a menudo con sucursales, que prueban más versiones al mismo tiempo o que trabajan casi sin conexión pueden beneficiarse de las características de Git. Existen algunas funciones muy útiles, como el ocultamiento que no se encuentra con SVN, que pueden hacer la vida más fácil. Pero en el otro lado no todas las personas necesitarán todas las características. Así que no puedo ver a los muertos de SVN.

Git necesita una mejor documentación y el informe de errores debe ser más útil. También las GUI útiles existentes son raramente. Esta vez solo he encontrado 1 GUI para Linux compatible con la mayoría de las funciones de Git (git-cola). La integración de Eclipse está funcionando pero no se ha lanzado oficialmente y no hay un sitio de actualización oficial (solo un sitio de actualización externo con compilaciones periódicas desde el troncal http://www.jgit.org/updates ). Así que la forma más preferida de usar Git en estos días. es la linea de comando


Bueno, se distribuye. Los puntos de referencia indican que es considerablemente más rápido (dada su naturaleza distribuida, las operaciones como diffs y los registros son locales, por lo que es increíblemente más rápido en este caso), y las carpetas de trabajo son más pequeñas (lo que aún me sorprende).

Cuando está trabajando en Subversion, o en cualquier otro sistema de control de revisión de cliente / servidor, esencialmente crea copias de trabajo en su máquina al revisar las revisiones. Esto representa una instantánea en el tiempo de cómo se ve el repositorio. Actualiza su copia de trabajo a través de actualizaciones, y actualiza el repositorio a través de confirmaciones.

Con un control de versión distribuido, no tiene una instantánea, sino todo el código base. ¿Quieres hacer una diferencia con una versión de 3 meses? No hay problema, la versión de 3 meses todavía está en tu computadora. Esto no solo significa que las cosas son mucho más rápidas, sino que, si está desconectado de su servidor central, aún puede realizar muchas de las operaciones a las que está acostumbrado. En otras palabras, no solo tiene una instantánea de una revisión dada, sino todo el código base.

Pensarías que Git ocuparía un montón de espacio en tu disco duro, pero de un par de puntos de referencia que he visto, en realidad toma menos. No me preguntes cómo. Quiero decir, fue construido por Linus, él sabe una o dos cosas sobre sistemas de archivos, supongo.


Algunas respuestas han aludido a estas, pero quiero hacer 2 puntos explícitos:

1) La capacidad de realizar confirmaciones selectivas (por ejemplo, git add --patch ). Si su directorio de trabajo contiene varios cambios que no son parte del mismo cambio lógico, Git hace que sea muy fácil realizar un compromiso que incluya solo una parte de los cambios. Con Subversion, es difícil.

2) La capacidad de comprometerse sin hacer público el cambio. En Subversion, cualquier compromiso es inmediatamente público, y por lo tanto irrevocable. Esto limita enormemente la capacidad del desarrollador para "cometer temprano, cometer a menudo".

Git es más que un VCS; También es una herramienta para desarrollar parches. La subversión es simplemente un VCS.


Easy Git tiene una buena página que compara el uso real de Git y SVN, que te dará una idea de lo que Git puede hacer (o hacer más fácilmente) en comparación con SVN. (Técnicamente, esto se basa en Easy Git, que es una envoltura liviana encima de Git).


Esta es la pregunta incorrecta que se debe hacer. Es muy fácil concentrarse en las verrugas de Git y formular un argumento acerca de por qué la subversión es ostensiblemente mejor, al menos en algunos casos de uso. El hecho de que git se diseñó originalmente como un conjunto de construcción de control de versiones de bajo nivel y tiene una interfaz orientada a desarrolladores de linux barroco facilita que las guerras santas ganen fuerza y ​​perciban la legitimidad. Los defensores de Git golpean el tambor con millones de ventajas de flujo de trabajo, que svn chicos proclaman innecesarias. Muy pronto, todo el debate se enmarca como centralizado frente a distribuido, lo que sirve a los intereses de la comunidad de herramientas svn empresariales. Estas compañías, que normalmente publican los artículos más convincentes sobre la superioridad de Subversion en la empresa, dependen de la inseguridad percibida de git y de la preparación empresarial de svn para el éxito a largo plazo de sus productos.

Pero aquí está el problema: la subversión es un callejón sin salida arquitectónico .

Mientras que puede tomar git y construir un reemplazo de subversión centralizado con bastante facilidad, a pesar de estar presente por más del doble de tiempo, svn nunca ha sido capaz de hacer que el seguimiento de fusión básico funcione en cualquier lugar tan cerca como lo hace en git. Una razón básica de esto es la decisión de diseño de hacer que las sucursales sean lo mismo que los directorios. Originalmente, no sé por qué se fueron de esta manera, ciertamente hace que los registros parciales sean muy simples. Desafortunadamente, también hace imposible rastrear la historia correctamente. Ahora, obviamente, se supone que debe usar las convenciones de diseño del repositorio de subversión para separar las sucursales de los directorios regulares, y svn utiliza algunas heurísticas para hacer que las cosas funcionen en los casos de uso diario. Pero todo esto es solo un papeleo sobre una decisión de diseño muy pobre y limitante de bajo nivel. Ser capaz de hacer una diferencia en el repositorio (en lugar de una diferencia en el directorio) es una funcionalidad básica y crítica para un sistema de control de versiones, y simplifica enormemente las funciones internas, haciendo posible la creación de funciones más inteligentes y útiles sobre ella. Puede ver la cantidad de esfuerzo que se ha invertido en extender la subversión y, sin embargo, a qué distancia está de la cosecha actual de VCS modernos en términos de operaciones fundamentales como la resolución de fusión.

Este es mi consejo sincero y agnóstico para cualquiera que aún crea que Subversion es lo suficientemente bueno para el futuro inmediato:

Subversion nunca alcanzará a las nuevas razas de VCS que han aprendido de los errores de RCS y CVS; es una imposibilidad técnica a menos que actualicen el modelo de repositorio desde el principio, pero en realidad no sería svn ¿verdad? Independientemente de cuánto piense que no tiene las capacidades de un VCS moderno, su ignorancia no lo protegerá de los escollos de Subversion, muchos de los cuales son situaciones imposibles o fáciles de resolver en otros sistemas.

Es extremadamente raro que la inferioridad técnica de una solución sea tan clara como con svn, ciertamente nunca diré tal opinión sobre win-vs-linux o emacs-vs-vi, pero en este caso es así Es claro, y el control de la fuente es una herramienta tan fundamental en el arsenal del desarrollador, que creo que debe ser declarado de manera inequívoca. Independientemente del requisito de usar svn por razones organizativas, imploro a todos los usuarios de svn que no permitan que su mente lógica cree que los VCS más modernos solo son útiles para grandes proyectos de código abierto. Independientemente de la naturaleza de su trabajo de desarrollo, si usted es un programador, será un programador más efectivo si aprende a usar VCS mejor diseñados, ya sea Git, Mercurial, Darcs o muchos otros.


David Richards WANdisco Blog en Subversion / GIT

La aparición de GIT ha traído consigo una raza de fundamentalistas de DVCS, los 'Gitterons', que piensan que cualquier otra cosa que no sea GIT es una mierda. Los Gitterons parecen pensar que la ingeniería de software ocurre en su propia isla y, a menudo, olvidan que la mayoría de las organizaciones no emplean exclusivamente ingenieros de software de alto nivel. Eso está bien, pero no es así como lo piensa el resto del mercado, y me complace probarlo: GIT, en el último aspecto tenía menos del tres por ciento del mercado, mientras que Subversion tiene alrededor de cinco millones de usuarios y aproximadamente la mitad de El mercado en general.

El problema que vimos fue que los Gitterons estaban disparando (barato) tiros a Subversion. Tweets como "La subversión es tan [lenta / cutre / restrictiva / no huele bien / me mira de forma divertida] y ahora tengo GIT y [todo funciona en mi vida / mi esposa quedó embarazada / después de que obtuve una novia 30 años de intentarlo / gané seis veces corriendo en la mesa de blackjack]. Te dan la imagen.



Con Git, puedes hacer prácticamente cualquier cosa sin conexión, porque todos tienen su propio repositorio.

Hacer ramas y fusionarlas es realmente fácil.

Incluso si no tiene derechos de compromiso para un proyecto, puede tener su propio repositorio en línea y publicar "solicitudes de inserción" para sus parches. Todos los que gustan de sus parches pueden incluirlos en su proyecto, incluidos los mantenedores oficiales.

Es trivial dividir un proyecto, modificarlo y seguir fusionando las correcciones de errores de la rama HEAD.

Git funciona para los desarrolladores del kernel de Linux. Eso significa que es realmente rápido (tiene que serlo), y escala a miles de contribuyentes. Git también utiliza menos espacio (hasta 30 veces menos espacio para el repositorio de Mozilla).

Git es muy flexible, muy TIMTOWTDI (hay más de una forma de hacerlo). Puede utilizar el flujo de trabajo que desee y Git lo admitirá.

Finalmente, está GitHub , un gran sitio para alojar tus repositorios Git.

Inconvenientes de Git:

  • es mucho más difícil de aprender, porque Git tiene más conceptos y más comandos.
  • Las revisiones no tienen números de versión como en Subversion
  • muchos comandos de Git son crípticos, y los mensajes de error son muy hostiles
  • carece de una buena GUI (como la gran TortoiseSVN )

Eric Sink de SourceGear escribió una serie de artículos sobre las diferencias entre los sistemas de control de versiones distribuidos y no distribuidos. Compara los pros y los contras de los sistemas de control de versiones más populares. Lectura muy interesante.
Los artículos se pueden encontrar en su blog, www.ericsink.com :


Los principales puntos que me gustan de DVCS son esos:

  1. Puedes cometer cosas rotas. No importa porque otras personas no los verán hasta que publiques. El tiempo de publicación es diferente del tiempo de compromiso.
  2. Por eso puedes cometer más a menudo.
  3. Puedes fusionar funcionalidad completa. Esta funcionalidad tendrá su propia rama. Todas las confirmaciones de esta rama estarán relacionadas con esta funcionalidad. Puede hacerlo con un CVCS, pero con DVCS es el valor predeterminado.
  4. Puedes buscar en tu historial (encontrar cuando cambia una función)
  5. Puede deshacer un tirón si alguien arruina el repositorio principal, no necesita corregir los errores. Sólo borra la fusión.
  6. Cuando necesite un control de código fuente en cualquier directorio, haga lo siguiente: git init. Y puedes cometer, deshacer cambios, etc ...
  7. Es rápido (incluso en Windows)

La razón principal para un proyecto relativamente grande es la mejor comunicación creada por el punto 3. Otros son bonificaciones agradables.





git