Nota: Consulte "EDITAR" para ver la respuesta a la pregunta actual.
En primer lugar, lea Subversion Re-education de Joel Spolsky. Creo que la mayoría de sus preguntas serán respondidas allí.
Otra recomendación, la charla de Linus Torvalds sobre Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Este otro también puede responder la mayoría de sus preguntas, y es bastante entretenido.
Por cierto, algo que me parece bastante divertido: incluso Brian Fitzpatrick y Ben Collins-Sussman, dos de los creadores originales de subversion dijeron en una charla de Google "lo siento por eso" refiriéndose a que la subversión es inferior al mercurial (y DVCS en general).
Ahora, IMO y, en general, la dinámica del equipo se desarrolla de forma más natural con cualquier DVCS, y un beneficio sobresaliente es que puede comprometerse fuera de línea porque implica lo siguiente:
- No depende de un servidor y una conexión, lo que significa tiempos más rápidos.
- No ser esclavo de los lugares donde puede obtener acceso a Internet (o una VPN) solo para poder comprometerse.
- Todos tienen una copia de seguridad de todo (archivos, historial), no solo del servidor. Lo que significa que cualquiera puede convertirse en el servidor .
- Puede comprometerse compulsivamente si lo necesita sin alterar el código de los demás . Los compromisos son locales. No se pisan los pies mientras se comprometen. No se rompen las compilaciones o entornos de otros simplemente comprometiéndose.
- Las personas sin "acceso de compromiso" pueden comprometerse (porque comprometerse en un DVCS no implica cargar código), reduciendo la barrera para las contribuciones, puede decidir retirar sus cambios o no como integrador.
- Puede reforzar la comunicación natural ya que un DVCS hace que esto sea esencial ... en subversión, lo que tienes en cambio son las carreras de compromiso, que fuerzan la comunicación, pero al obstruir tu trabajo.
- Los contribuyentes pueden asociarse y manejar su propia fusión, lo que significa menos trabajo para los integradores al final.
- Los contribuyentes pueden tener sus propias sucursales sin afectar las de los demás (pero poder compartirlas si es necesario).
Sobre tus puntos:
- La fusión del infierno no existe en DVCSland; no necesita ser manejado Ver siguiente punto .
- En los DVCS, todos representan una "rama", lo que significa que hay fusiones cada vez que se realizan cambios. Las ramas con nombre son otra cosa.
- Puede seguir utilizando la integración continua si lo desea. Sin embargo, no es necesario en mi humilde opinión, ¿por qué agregar complejidad ?, solo mantenga sus pruebas como parte de su cultura / política.
- Mercurial es más rápido en algunas cosas, git es más rápido en otras cosas. No realmente depende de DVCS en general, sino de sus implementaciones particulares AFAIK.
- Todos siempre tendrán el proyecto completo, no solo tú. Lo distribuido tiene que ver con que puede confirmar / actualizar localmente, compartir / tomar desde fuera de su computadora se llama empujar / tirar.
- Nuevamente, lea Subversion Re-education. Los DVCS son más fáciles y más naturales, pero son diferentes, no intente pensar que cvs / svn === es la base de todas las versiones.
Estaba aportando algo de documentación al proyecto de Joomla para ayudar a predicar una migración a DVCS, y aquí hice algunos diagramas para ilustrar centralizado vs distribuido.
Centralizado
Distribuido en práctica general
Distribuido al máximo
Usted ve en el diagrama que todavía hay un "repositorio centralizado", y este es uno de los argumentos favoritos de los fanáticos del versionado centralizado: "todavía está siendo centralizado", y no, no lo es, ya que el repositorio "centralizado" es solo un repositorio que usted todos están de acuerdo (por ejemplo, un repositorio oficial de github), pero esto puede cambiar en cualquier momento que lo necesite.
Ahora, este es el flujo de trabajo típico para proyectos de código abierto (por ejemplo, un proyecto con colaboración masiva) usando DVCS:
Bitbucket.org es algo así como un equivalente de github para mercurial, sepa que tienen repositorios privados ilimitados con espacio ilimitado, si su equipo es más pequeño que cinco, puede usarlo de forma gratuita.
La mejor manera de convencerse de usar un DVCS es probando un DVCS, cada desarrollador de DVCS experimentado que haya usado svn / cvs le dirá que vale la pena y que no saben cómo sobrevivieron todo su tiempo sin él.
EDITAR : Para responder a su segunda edición, solo puedo reiterar que con un DVCS tiene un flujo de trabajo diferente, le aconsejaría que no busque razones para no intentarlo debido a las mejores prácticas , parece que cuando la gente argumenta que OOP no es necesario porque pueden sortear patrones de diseño complejos con lo que siempre hacen con el paradigma XYZ; Puedes beneficiarte de todos modos.
Pruébalo, verás cómo trabajar en "una sucursal privada" es en realidad una mejor opción. Una razón por la que puedo decir por qué lo último es cierto es porque pierdes el miedo a comprometerte , permitiéndote hacerlo en cualquier momento que creas conveniente y trabajar de una manera más natural.
Con respecto a "fusionar el infierno", usted dice "a menos que estemos experimentando", yo digo "incluso si está experimentando + manteniendo + trabajando en v2.0 renovado al mismo tiempo ". Como dije antes, fusionar el infierno no existe porque:
- Cada vez que se compromete genera una rama sin nombre, y cada vez que sus cambios se encuentran con los cambios de otras personas, se produce una fusión natural.
- Debido a que los DVCS recopilan más metadatos para cada confirmación, se producen menos conflictos durante la fusión ... por lo que incluso podría llamarlo una "fusión inteligente".
- Cuando te topas con conflictos de fusión, esto es lo que puedes usar:
Además, el tamaño del proyecto no importa, cuando cambié de subversión ya estaba viendo los beneficios mientras trabajaba solo, todo se sentía bien. Los conjuntos de cambios (no exactamente una revisión, pero un conjunto específico de cambios para archivos específicos que incluye una confirmación, aislada del estado de la base de código) le permiten visualizar exactamente lo que quiso decir al hacer lo que estaba haciendo a un grupo específico de archivos, No todo el código base.
En cuanto a cómo funcionan los conjuntos de cambios y el aumento del rendimiento. Trataré de ilustrarlo con un ejemplo que me gusta dar: el cambio de proyecto mootools de svn ilustrado en su gráfico de red github .
antes de
Después
Lo que está viendo es que los desarrolladores pueden concentrarse en su propio trabajo mientras se comprometen, sin temor a descifrar el código de los demás, se preocupan por descifrar el código de los demás después de presionar / tirar (DVCS: primero confirmar, luego presionar / tirar, luego actualizar ) pero dado que la fusión es más inteligente aquí, a menudo nunca lo hacen ... incluso cuando hay un conflicto de fusión (lo cual es raro), solo pasas 5 minutos o menos reparándolo.
Mi recomendación para usted es buscar a alguien que sepa cómo usar mercurial / git y decirle que se lo explique de manera práctica. Al pasar aproximadamente media hora con algunos amigos en la línea de comando mientras utilizamos mercurial con nuestros escritorios y cuentas de bitbucket que les muestran cómo fusionarse, incluso inventando conflictos para que vean cómo solucionarlos en una cantidad de tiempo ridícula, pude mostrar ellos el verdadero poder de un DVCS.
Finalmente, te recomiendo que uses mercurial + bitbucket en lugar de git + github si trabajas con Windows. Mercurial también es un poco más simple, pero git es más potente para una gestión de repositorio más compleja (por ejemplo, git rebase ).
Algunas lecturas recomendadas adicionales: