Sistemas de Control de Versiones Distribuidas y la Empresa - una buena mezcla? [cerrado]


Puedo ver por qué los sistemas de control de código distribuido (Mercurial como DVCS) tienen sentido para proyectos de código abierto.

Pero, ¿tienen sentido para una empresa? (sobre un Sistema de Control de Fuentes centralizado como TFS)

¿Qué características de un DVCS lo hacen mejor o peor adecuado para una empresa con muchos desarrolladores? (sobre un sistema centralizado)

Author: faradaj, 2011-04-16

9 answers

Acabo de introducir un DVCS (Git en este caso) en una gran compañía bancaria, donde Perforce, SVN o ClearCase eran los VCS centralizados de opciones:
Ya sabía de los desafíos (ver mi respuesta anterior " ¿Podemos finalmente pasar a DVCS en Software Corporativo? ¿Es SVN todavía un 'must have' para el desarrollo?")

He sido desafiado en tres frentes: {[12]]}

  • Centralización: mientras que el modelo descentralizado tiene sus méritos (y permite commits privados o trabajando sin la red mientras se tiene acceso al historial completo ), todavía necesita haber un conjunto claro de repos centralizados , que actúen como la referencia principal para todos los desarrolladores.

  • Autenticación : un DVCS le permite "cerrar sesión" (confirmar) su código como... casi cualquier persona (autor " foo", correo electrónico " [email protected]").
    Puedes hacer un git config user.name foo, o git config user.name whateverNameIFeelToHave, y tener todas tus confirmaciones con nombre falso en él.
    Que no se mezclan bien con el referencial de usuario único centralizado de "Active Directory" utilizado por grandes empresas.

  • Authorization: por defecto, puede clonar, empujar o tirar a cualquier repositorio, y modificar cualquier rama, o cualquier directorio.
    Para los proyectos sensibles, que puede ser un problema de bloqueo (el mundo bancario suele ser muy protector de algunos algoritmos de precios o quants, que requieren un estricto acceso de lectura / escritura para un número muy limitado de personas)

La respuesta (para una configuración de Git) fue:

  • centralización: se ha configurado un servidor único para cualquier repositorio que tenga que ser accesible por todos los usuarios.
    La copia de seguridad se ha estado encargando (incremental todos los días, completa todas las semanas).
    Se ha implementado DRP (Disaster Recovery Plan), con un segundo servidor en otro sitio, y con replicación de datos en tiempo real a través de SRDF.
    Esta configuración en sí misma es independiente de la tipo de referencial o herramienta que necesita (DVCS, o Nexus repo, o main Hudson scheduler, o...): cualquier herramienta que pueda ser crítica para una versión en producción debe instalarse en servidores con copia de seguridad y DR.

.

  • autenticación : solo dos protocolos permiten a los usuarios acceder a los repositorios principales:
    • basado en ssh, con clave pública / privada:
      • útil para usuarios externos a la organización (como el desarrollo off-shore),
      • y útil para cuentas genéricas que Active Directory manager no quiere crear (porque sería una cuenta "anónima"): una persona real tiene que ser responsable de esa cuenta genérica, y esa sería la que posee la clave privada
    • basado en https, con un Apache autenticando a los usuarios a través de una configuración LDAP: de esa manera, se debe proporcionar un inicio de sesión real para cualquier operación git en esos repositorios.
      Git lo ofrece con su protocolo http inteligente , permitiendo no solo pull (leer) a través de http, pero también push (escribir) a través de http.

La parte de autenticación también está reforzada a nivel de Git por un post-receive hook que se asegura de que al menos uno de los commits que está enviando a un repositorio tenga un "committer name" igual al nombre de usuario detectado a través del protocolo shh o http.
En otras palabras, necesita configurar su git config user.name correctamente, o cualquier empuje que desee hacer a un repositorio central será rechazar.

.

  • authorization : ambas configuraciones anteriores (ssh o https) están cableadas para llamar al mismo conjunto de script perl, llamado gitolita, con parámetros as:
    • el nombre de usuario real detectado por esos dos protocolos
    • el comando git (clonar, empujar o tirar) que el usuario quiere hacer

El script de gitolite perl analizará un archivo de texto simple donde las autorizaciones (lectura / escritura se ha establecido el acceso para un repositorio all, o para ramas dentro de un repositorio dado, o incluso para directorios dentro de un repositorio).
Si el nivel de acceso requerido por el comando git no coincide con la ACL definida en ese archivo, el comando se rechaza.


Lo anterior describe lo que necesitaba implementar para una configuración de Git, pero lo más importante es que enumera los principales problemas que deben abordarse para que una configuración de DVCS tenga sentido en una gran corporación con un usuario único basar.

Entonces, y solo entonces, un DVCS (Git, Mercurial,...) puede agregar valores debido a:

  • Intercambio de datos entre múltiples sitios: si bien todos esos usuarios se autentican a través del mismo Active Directory, pueden ubicarse en todo el mundo (las empresas para las que he trabajado tienen desarrollos generalmente entre equipos en dos o tres países). Un DVCS se hace naturalmente para intercambiar datos eficientemente entre ésos distribuidos equipo.

  • Replicación en entornos: una configuración que se ocupa de la autenticación/autorización permite clonar esos repositorios en otros servidores dedicados (para pruebas de integración, pruebas UAT, preproducción y pre-despliegue)

  • Process automation: la facilidad con la que puede clonar un repositorio también se puede usar localmente en la estación de trabajo de un usuario, para fines de prueba unitaria con las técnicas de "confirmaciones guardadas" y otros usos inteligentes: ver " ¿Cuál es el uso más inteligente del repositorio de código fuente que haya visto?".
    En resumen, puede enviar a un segundo repositorio local a cargo de:

    • varias tareas (prueba unitaria o análisis estático del código)
    • volver al repositorio principal si esas tareas tienen éxito
    • mientras que todavía está trabajando en el primer repositorio sin tener que esperar el resultado de esas tareas.

.

  • características del asesino: Cualquier DVCS viene con ellos, el principal es merging (¿alguna vez intentó hacer un flujo de trabajo de fusión complejo con SVN? ¿O sloooowly fusionar 6000 archivos con ClearCase?).
    Eso solo (fusionar) significa que realmente puede aprovechar ramificando , mientras que puede en todo momento fusionar su código a otra línea "principal" de desarrollo, porque lo haría:
    • primero localmente dentro de su propio repositorio, sin molestar a nadie
    • luego en el servidor remoto, empujando el resultado de esa fusión en el repositorio central.
 89
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:33

Para agregar a los otros comentarios, observaría que no hay razón para que no pueda tener un Repositorio Central Corporativo. Técnicamente es solo otro repositorio, pero es desde el que envías la producción. He estado usando una forma u otra de VCS por más de 30 años y puedo decir que cambiar a Mercurial fue como un chico de ciudad respirando aire limpio del campo por primera vez.

 1
Author: Peter Rowell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-15 23:35:09

Los DSC tienen una historia mejor (generalmente) que los sistemas centralizados para redes lentas o sin conexión. Tienden a ser más rápidos, lo que es realmente notable para los desarrolladores (que usan TDD) que hacen muchos check-ins.

Los sistemas centralizados son algo más fáciles de entender inicialmente y podrían ser una mejor opción para los desarrolladores menos experimentados. DVCSes le permiten crear un montón de mini-ramas y aislar nuevas características mientras sigue haciendo rojo-gree-refactor checkin en estilo verde de codificación. Una vez más esto es muy potente pero solo atractivo para los equipos de desarrollo bastante inteligentes.

Tener un único repositorio central para soportar bloqueos exclusivos tiene sentido si se trata de archivos que no se pueden fusionar, como activos digitales y documentos que no son de texto (PDF y Word, etc.), ya que evita que se meta en un lío y se fusione manualmente.

No creo que el número de desarrolladores o el tamaño de la base de código juegue mucho en ello, ambos sistemas han demostrado ser compatibles con grandes árboles de fuentes y números de committers. Sin embargo, para grandes bases de código y proyectos DVCS da mucha flexibilidad para crear rápidamente ramas remotas descentralizadas. Puede hacer esto con sistemas centralizados, pero debe ser más deliberado al respecto, lo que es bueno y malo.

En resumen, hay algunos aspectos técnicos a considerar, pero también debe pensar en la madurez de su equipo y su proceso actual en torno a los SCCS.

 1
Author: Ade Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-16 00:38:58

Al menos con tfs 2013 tiene la capacidad de trabajar desconectado con espacios de trabajo locales. Distribuido vs centralizado es definido por el negocio y depende de las necesidades y requerimientos de los proyectos en desarrollo.

Para los proyectos empresariales, la capacidad de conectar el flujo de trabajo y los documentos a los cambios de código puede ser fundamental para conectar los requisitos empresariales y los elementos de orden superior a los cambios de código específicos que abordan un cambio, error o característica específicos además.

Esta conexión entre el flujo de trabajo y el repositorio de código separa TFS de las soluciones de solo repositorio de código. Para algunos lugares donde se requiere un orden más alto de auditoría de proyectos, solo un producto como TFS satisfaría más de los requisitos de auditoría de proyectos.

Puede encontrar una descripción general del proceso de administración del ciclo de vida de la aplicación aquí.

Http://msdn.microsoft.com/en-us/library/vstudio/fda2bad5 (v=vs.110). aspx

 1
Author: Mike Beeler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-25 04:27:08

El mayor problema que enfrentamos con Git en la configuración empresarial es la falta de control de acceso de lectura basado en rutas. Es inherente a la arquitectura de Git (y asumiría que la mayoría de DVCSs) que si tienes acceso de lectura al repositorio, lo obtienes todo. Pero a veces un proyecto requeriría una comprobación dispersa (es decir, desea controlar la versión de los datos confidenciales cerca de la fuente, o desea dar a terceros una vista selectiva de parte del proyecto).

Fuera de la caja, Git proporciona no permisos-tienes ganchos para escribir los tuyos propios.

La mayoría de los populares repo managers GithubEnterprise, Gitlab, Bitbucket proporcionan restricciones de escritura basadas en ramas. Gitolite permite ser más fino grano, proporcionando ruta (y más) basado en restricciones de escritura.

El único gestor de repositorios del que he oído hablar que admite el acceso de lectura es Perforce Helix, que reimplanta el protocolo git sobre el backend de Perforce, pero no tengo experiencia práctica con él. Es prometedor, pero sería preocupado por lo compatible que es con" plain " git.

 1
Author: ddimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-12 00:31:29

Para mí lo más importante que ofrecen es la velocidad. Son órdenes de magnitud más rápidos para las operaciones más comunes que el control de fuente centralizado.

Trabajar desconectado también es una gran ventaja.

 0
Author: Brook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-15 23:29:40

Absolutamente un modelo de código fuente distribuido puede tener sentido en una empresa, pero depende de la estructura de sus equipos.

El control de código fuente distribuido le da la flexibilidad para crear sus propios flujos de trabajo.

Imagine, si quiere, un equipo más grande, dentro del cual hay equipos más pequeños que trabajan en ramas de características separadas.

  • Todos estos equipos pueden tener sus propios repositorios centrales, con sus propios mecanismos de control de build automation/checkin.
  • Pueden funcionar en cualquier lugar, y respaldar su trabajo local cuando lo deseen.
  • Luego pueden elegir qué checks les gustaría compartir entre los grupos.
  • Pueden tener un solo integrador individual, trabajando en su propia máquina, realizando la fusión, sin impactar a los demás.

Estas son cosas que podría lograr con un servidor centralizado tradicional, pero como señala @Brook, el modelo centralizado tiene que escalar, mientras que el modelo distribuido es ya fragmentado, por lo que no (o al menos, menos) necesita escalar verticalmente ningún servidor.

 0
Author: Khanzor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-15 23:34:33

Nuestro equipo usó TFS durante aproximadamente 3 años antes de cambiar a Mercurial. El soporte de rama / fusión de HG es mucho mejor que TFS. Esto se debe a que un DVCS se basa en la fusión sin dolor.

 0
Author: Jim Bolla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-16 00:13:13

Mejor sincronización entre ubicaciones remotas / desconectadas.

 -1
Author: Ondrej Tucny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-15 23:27:06