Mi equipo de mi empleador anterior usó Git, y funcionó bien para nosotros. No éramos tan grandes (tal vez 16 o así, con quizás 8 committers realmente activos?), Pero tengo respuestas a sus preguntas:
- Las fusiones de N-Way no son terriblemente comunes. Se nos ocurrieron algunas convenciones sobre nombres de sucursales que nos permitieron escribir scripts que facilitaron el proceso de "liberación de ingeniería" (utilizo comillas de susto porque no teníamos un ingeniero de versiones), y las personas crearían ramas de características privadas, pero rara vez tuvo un problema con la fusión de más de dos ramas (ver el siguiente).
- (y # 3).Teníamos un repositorio central en un servidor de desarrollo por tres razones: (a) La máquina de desarrollo tenía un RAID5 (más tolerante a fallas) y copias de seguridad nocturnas (las estaciones de trabajo dev no eran todas las noches), (b) las versiones de producción se creaban en el servidor de desarrollo. y (c) tener un repositorio central simplificado de scripting. Como resultado, las fusiones en N simplemente nunca sucedieron. Lo más parecido que tuvimos a N-way fue cuando alguien se fusionó lateralmente y luego se fusionó verticalmente.
Git fue una gran cosa para nosotros debido a su alto grado de flexibilidad; sin embargo, tuvimos que establecer algunas convenciones (nombres de ramas y etiquetas, ubicaciones de repositorios, scripts, etc., proceso) o podría haber sido un poco caótico. Una vez que configuramos las convenciones, la flexibilidad que teníamos era simplemente fantástica.
Actualización: nuestras convenciones básicamente eran así:
- un directorio en nuestro servidor NFS que albergaba todos los depósitos centrales
- que teníamos varios proyectos que comparten componentes, por lo que les estalló en las bibliotecas, en esencia, con sus propios repositorios, y los proyectos entregables simplemente los incluyeron como submódulos de git.
- no eran cadenas de versión y suelte los nombres que se nos imponen desde arriba, por lo que sólo utiliza una variantes de esas como nombres de rama
- Del mismo modo, para las etiquetas, siguieron los nombres de liberación procesos dictado
- los proyectos entregables contenidos un archivo de propiedades que leí en los guiones del intérprete de comandos, y eso me permitió escribir un solo guión para gestionar el proceso de lanzamiento para todos los proyectos, aunque cada uno tenía pequeñas variaciones en el proceso; las variaciones se contabilizaron en esos archivos de propiedades
- Escribí scripts que reconstruirían un paquete entregable desde cualquier etiqueta
- usando git al nos bajó para controlar el acceso usando PAM y/o permisos de usuario normales (ssh, etc.)
- Hubo otras convenciones que son más difíciles de poner en una lista con viñetas, como cuando las fusiones deberían suceder. Realmente, yo y otro hombre somos una especie de "git gurus" internos, y ayudamos a todos a descubrir cómo usar las ramas y cuándo fusionarse.
- hacer que la gente se comprometa en trozos pequeños y no dejar caer bombas-dif en la rama principal fue un desafío. Un hombre dejó caer aproximadamente dos semanas de trabajo en un compromiso, y finalmente tuvimos que resolverlo todo. Un enorme pérdida de tiempo, y frustrante para todos.
- comentarios informativos y detallados para ir con compromete
Había otras cosas que se aprende como su equipo se experimenta y aprende a trabajar unos con otros, pero esto fue suficiente para que podamos empezar.
actualización: cualquiera que siga este tipo de cosas a estas alturas ya lo sabe, pero Vicente Dreissen ha escrito un sólido y bastante completa (pero no exaustive) take on branching and release engineering using Git. Me animo a usar su proceso como un punto de partida porque, por dos razones:
- un montón de equipos de hacerlo de esta manera o si está usando alguna variante cercana (incluyendo Linux, Git, y muchos otros equipos de proyecto OSS), que significa que este método ha sido probado y ajustado para tener éxito en la mayoría de las circunstancias. Es muy poco probable que enfrente un problema que no se haya enfrentado y resuelto dentro de las limitaciones de este modelo.
- debido a lo anterior, casi cualquier ingeniero con experiencia en Git entenderá lo que está pasando. No tendrá que escribir documentación detallada sobre la naturaleza fundamental de su proceso de publicación; solo tendrá que documentar cosas específicas solo para su proyecto o equipo.
Espero que no esté cerca rápidamente, creo que es una muy buena pregunta.Lamentablemente, no estoy calificado para responder, solo uso git en proyectos personales, ya que el trabajo está bastante retrasado, todavía uso CVS para algunos proyectos y svn para otros. En su mayor parte, parece que las personas que usan svn piensan que son "modernas". :-) – Benson
Creo que encontrarás muchos lugares de trabajo (como el mío) donde la respuesta real a esta pregunta es "en privado" o "sin el conocimiento del resto del equipo". –
Desafortunadamente, parece que la mejor respuesta fue realmente para un equipo pequeño. ¿Hay alguien haciendo esto con equipos en los 50 - 100+? –