2010-07-06 20 views
41

posibles duplicados:
For home projects, can Mercurial or Git (or other DVCS) provide more advantages over Subversion?
What are the relative strengths and weaknesses of Git, Mercurial, and Bazaar?Git Mercurial vs vs SVN

¿Cuáles son algunas de las diferencias entre estos sistemas de control de código fuente? ¿Cuál es el mejor para un pequeño proyecto de 2 personas?

+1

Ver [Para proyectos domésticos, ¿Mercurial o Git (u otro DVCS) ofrecen más ventajas que Subversion?] (Http://stackoverflow.com/questions/1218471/for-home-projects-can-mercurial-or- git-or-other-dvcs-provide-more-advantages-o) –

+0

Ver http://stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128 – VonC

+0

http://stackoverflow.com/questions/ 885213/in-short-what-are-the-advantages-of-git-and-mercurial-over-subversion http://stackoverflow.com/questions/871/why-is-git-better-than-subversion – joeynelson

Respuesta

46

SVN es diferente de Git y Mercurial, en que se trata de un único repositorio que todos los usuarios tienen que tirar y comprometerse.

Git y Mercurial tienen un modelo distribuido. Esto significa que hay un repositorio en cada computadora y que generalmente hay un repositorio "oficial" del que las personas elegirán realizar sus cambios y extraer.

Git y Mercurial son extremadamente similares. Prefiero Mercurial porque me pareció mucho más fácil de usar. Para un equipo de 2 personas recomendaría Mercurial, pero esa es solo mi opinión. Si no está familiarizado con el control de versiones, tendrá que perder el tiempo aprendiendo a utilizar cualquiera de las opciones, pero Mercurial me pareció el más fácil.

Para iniciar un repositorio de Mercurial, todo lo que tiene que hacer es abrir un shell y un cd al directorio en el que desea tener control de versión, y escribir hg init. Eso crea el repositorio. Para agregar todo en la carpeta al repositorio, escriba hg add .. Éstos son algunos otros varios comandos:

  • para confirmar los cambios locales: hg commit -m "Descriptions of changes"
  • Para tirar a la última versión del servidor: hg pull
  • para empujar los cambios locales: hg push
+7

Si esto no se ha cubierto ya en uno de los duplicados vinculados (enumerados en la pregunta), debe publicar una respuesta en uno de ellos. –

+1

Gran definición. De hecho, trabajo con mercurial en una empresa y trabajo con SVN en otra empresa. Estoy pensando en utilizar Git para mis proyectos personales. Seguiré con más detalles una vez que tenga una mejor comprensión de git. –

+0

Si tiene que elegir entre mercurial y git. Ve con git. No digo que sea mejor. Pero es el que se usa comúnmente hoy en día. Hay un ecosistema mucho más grande que rodea git (Github, Stahs, Gitlab, soporte de IDE, etc.) que mercurial. Además, la mayoría de los desarrolladores tendrán instalado git y sabrán cómo usarlo. – Gellweiler

15

Para empezar, está el lenguaje en el que están escritos. Mis experiencias con Git y Mercurial han sido muy similares, pero sé que si quiero ajustar Mercurial, puedo hacerlo, porque está escrito en Python. Git está al menos algo en C, con lo que no estoy tan familiarizado.

Git y Mercurial son lo que se llama distribuida. Cada copia se crea igual, y pueden empujar y tirar (usando esa terminología) los cambios unos de otros en una base ad-hoc. Subversion, por otro lado, consiste en un único repositorio central, y cada copia de trabajo es un esclavo de ese servidor central, empujando y tirando (comprometiendo y actualizando, en este caso) los cambios desde él y solo.

Instalación de Git o Mercurial para un par de personas consiste en conseguir el acceso SSH al mismo servidor y la instalación de un par de paquetes. Mientras que para SVN, por lo que sé, necesita configurar y ejecutar una aplicación de servidor real en Apache, y luego meterse con un certificado SSL y .htaccess, etc. para asegurarlo.

Para todos mis proyectos personales, voy con Mercurial o Git. Si estuviera trabajando con un equipo grande, probablemente iría a Subversion porque obtendría autenticación centralizada y hosting. Pero para dos personas, elegiría una de las distribuidas, porque entonces no tiene que meterse con la autenticación centralizada y el alojamiento. :-)

+2

Usted puede tratar los sistemas de control de versiones distribuidas como si estuvieran centralizados, si eso se adapta al flujo de trabajo de un gran equipo. –

+1

Es cierto. Creo que es por eso que para los proyectos modernos parecen reemplazar SVN rotundamente. Ver: github. Pero creo que la autenticación/auditoría es más difícil de lograr con un DVCS porque el nombre de usuario es autoalimentado y la única forma (fácil) de hacerlo es compartir una cuenta SSH. Si confías en todos con esa clave, está bien, pero SVN te dirá con mucha más certeza quién hizo qué, y las personas pueden tener acceso de confirmación sin tener la capacidad de sobrescribir todo el repositorio, si tengo los privilegios de hacer un Git. o HG commit, tengo los privilegios para borrar todo. – jacobbaer

+1

Git ahora admite confirmaciones firmadas por PGP que son imposibles de falsificar, solo rechaza las confirmaciones no firmadas si le preocupa la auditoría. Y autenticación, ¿estás hablando como si usaras la misma clave SSH? Eso es simplemente estúpido y totalmente inseguro. – kyrias

6

Git y Mercurial son bastante similares (pero lo suficientemente diferentes como para merecer precaución).SVN, por otro lado, es bastante diferente: los dos primeros son VCS distribuidos, por lo que no requieren un servidor central, mientras que SVN sí. En general, muchos proyectos se están moviendo hacia sistemas distribuidos.

Para su pequeño proyecto, probablemente esté mejor con Git o Mercurial. El que elijas es esencialmente una cuestión de gusto, aunque prefiero a Git (y estoy mucho más familiarizado con él). No necesita configurar un servidor en absoluto: puede hacer push/pull cambios a través de SSH o incluso parches de correo electrónico entre sí (esto se puede hacer directamente desde el VCS, pero es una especie de molestia). Puede configurar un servidor central en cualquier momento, y todos los cambios estarán allí. Puedes usar, p. GitHub o Gitorious para alojar su proyecto (si va con Git, no sé sobre Mercurial).