Control de versiones para el desarrollo de juegos: ¿problemas y soluciones? [cerrado]

106

Hay muchos sistemas de control de versiones disponibles, incluidos los de código abierto como Subversion , Git y Mercurial , además de los comerciales como Perforce .

¿Qué tan bien apoyan el proceso de desarrollo de juegos? ¿Cuáles son los problemas al usar VCS con respecto a archivos que no son de texto (archivos binarios), proyectos grandes, etc. ¿Cuáles son las soluciones a estos problemas, si hay alguno?

Para organizar las respuestas, intentemos por paquete. Actualice cada paquete / respuesta con sus resultados.

Además, enumere algunos detalles breves en su respuesta, sobre si su VCS es gratuito o comercial, distribuido versus centralizado, etc.

Actualización : Encontré un buen artículo comparando dos de los VCS a continuación: aparentemente, Git es MacGyver y Mercurial es Bond . Bueno, me alegro de que esté resuelto ... Y el autor tiene una buena cita al final:

Está bien hacer proselitismo a aquellos que aún no se han cambiado a un VCS distribuido, pero tratar de convertir un usuario de Git a Mercurial (o viceversa) es una pérdida de tiempo y energía para todos.

Especialmente porque el verdadero enemigo de Git y Mercurial es Subversion . Dang, es un mundo de código-código-código en FOSS-land ...

Cyclops
fuente
Nota: esto está destinado a reemplazar la pregunta gamedev.stackexchange.com/questions/245/… . En 72 horas voy a eliminar esa pregunta, la dejo por ahora, para darles a las personas tiempo para copiar sus Respuestas / comentarios a esta Pregunta. :)
Cyclops
Esta probablemente terminará siendo una de mis preguntas favoritas, si la gente sigue las instrucciones de edición. Trabajando en una solución específica de Game Dev para esto ahora: D
Jesse Dorsey
@Noctrine, tuviste que agregar el descargo de responsabilidad si , ¿no? :) Por supuesto, la gente seguirá las instrucciones ...
Cyclops
No elimines la otra pregunta. Si está realmente fuera de tema (no lo creo), puede cerrarse y archivarse. También se puede cerrar como un duplicado de este.
Firas Assaad
@Firas, que se cierran - y volvió a abrir :) De todos modos, creo que esta formulación es mejor (y sí, es un wiki) - y si la gente copia sobre sus respuestas, éste debería cubrir toda la información de la otra pregunta.
Cyclops

Respuestas:

71

Git

Recientemente he estado en el tren de Git (he usado SVN y Mercurial). Hasta ahora me gusta mucho lo que obtengo con Git. Está lejos de ser una tarea difícil de configurar y más herramientas de desarrollo están comenzando a adoptar su uso.

Es un sistema de control de versiones distribuido. Esto nos permite tener nuestra propia área de tronco independiente. Puedo trabajar en mi propia área e invitarlos a ver los conjuntos de cambios con mucha facilidad. Puedo retroceder en mi propio espacio sin acumular el repositorio central. Puedo comprometerme, ramificarme y hacer todo lo que pueda hacer con SVN localmente. Realmente me gusta tener este control.

Con SVN, necesita acceder a su repositorio para confirmar. ¿Qué pasa si estás de viaje o en un café sin internet? No está bien.

Claro, SVN es mucho más simple de aprender, pero creo que las ventajas del control de fuente distribuida superan en gran medida el hecho de que tiene una pequeña curva de aprendizaje.

También me gusta que sea más inteligente acerca de la fusión.

Una desventaja importante de GIT es que almacena toda la historia localmente. (Sí, puede realizar una cirugía para reducir eso, pero es el comportamiento predeterminado). No es un problema en absoluto para los archivos de origen, pero si tiene un proyecto grande con gigabytes de datos de activos, se convierte en un problema rápidamente. En mi experiencia actual, recomendaría GIT solo para repositorios más pequeños o solo de origen.

Si todavía tiene curiosidad acerca de GIT, consulte http://thkoch2001.github.io/whygitisbetter/ para obtener buena información / métricas. Consulte también ver https://git.wiki.kernel.org/index.php/GitSvnComparsion

David McGraw
fuente
1
Me encanta la idea de la jerarquía de ramas que permite al control de calidad probar los cambios antes de que lleguen a la línea principal, o la fácil creación y validación de demostraciones.
Tenpn
@tenpn, ¿es esa una característica de VCS distribuido en general, o solo Git?
Cyclops
1
Escuché que Git y Mercurial sufren al insertar archivos muy grandes en ellos. ¿Alguna verdad sobre ese rumor de personas con más experiencia que yo?
drhayes
66
Git es bueno y todo, pero cuando se trata de manejar grandes recursos gráficos o musicales, como más de 100 de MB, se vuelve notablemente lento en las confirmaciones y salidas. Por el momento, Mercurial, el contendiente a Git, tiene una extensión de "archivos grandes" que aborda este problema específico. Si tienes un proyecto de juego que no tiene muchos recursos, puedes probar Git.
Spoike
3
¿Por qué no usar los submódulos de Git para administrar los archivos binarios? De esa forma, podría crear repositorios separados según sea necesario y luego vincularlos mediante submódulos. Cualquier cambio futuro en el repositorio principal no debería afectar a los submódulos.
Alex Schearer
62

Mercurial

Características clave:

  • VCS distribuido
  • Gratis, de código abierto
  • Los scripts de complementos son fáciles de escribir --- se pueden escribir en Python o como scripts de shell
  • Hay muchos scripts de complementos disponibles de forma gratuita.
  • Mucha documentación disponible, incluido este libro (muy recomendable)

Con respecto al uso de archivos que no son de texto, las últimas versiones de Mercurial (> = 2.0) proporcionan la extensión de archivo grande de forma predeterminada :

largefiles resuelve este problema agregando una capa centralizada de cliente-servidor encima de Mercurial: los archivos grandes viven en una tienda central en algún lugar de la red, y solo obtiene los que necesita cuando los necesita.

Hay otras extensiones que proporcionan soluciones similares, como la extensión bigfiles, que le permite almacenar sus activos en el mismo repositorio de Mercurial, pero solo obtiene los archivos binarios que necesita cuando los necesita.

No conozco ningún problema con respecto a proyectos grandes más allá de los relacionados con tener archivos binarios grandes. El proyecto Python es un proyecto grande y usa Mercurial .

Joel Spolsky ha escrito un mini tutorial sobre el uso de Mercurial en Subversion Re-education

talljosh
fuente
44
Nota interesante sobre la extensión Bigfiles: que aborda uno de los problemas informados en el hilo original, que Distributed VCS no encajaría bien con las producciones de juegos que tenían grandes cantidades de archivos binarios.
Cyclops
1
+1 para Mercurial. Es rápido, fácil de usar y sorprendentemente potente. :) Lo estoy usando para todo: desarrollo web, desarrollo de juegos, proyectos privados de una sola persona y proyectos de equipo. ¡Gracias por presentar la extensión BigFiles!
jacmoe
Con respecto a los proyectos grandes, TortoiseHg parece ir mucho más lento en un repositorio grande con 8 años de revisiones que en un repositorio pequeño con menos de 20 revisiones. Todavía no sé si esto es algo específico de Tortuga o de Mercurial en general.
Kylotan
44
No parece haber una opción comparable svn:needs-lock, y dado que tampoco hay forma de saber quién está trabajando localmente en qué archivos , está de vuelta para pasar un cuenco alrededor del equipo, literalmente (no se le permite editar sin el tazón en tu escritorio). Extensión de archivos grandes o no, este VCS es inútil para archivos binarios sin una solución práctica para esto.
Sam Harwell el
3
Independientemente del soporte de archivos grandes, si dos personas editan, digamos, un archivo Maya a la vez, uno se registrará y el otro tendrá que rehacer el trabajo. Con Perforce, al menos, puede saber que alguien más está editando el archivo (y también tiene un bloqueo automático en ese archivo).
dash-tom-bang
39

Forzosamente

Perforce (comercial / de código cerrado, centralizado) es el estándar de la industria por varias razones.

  1. Es un producto comercial, lo que significa que viene con soporte comercial. Los proyectos de código abierto pueden ser elegibles para una licencia gratuita (menos el soporte técnico).
  2. Admite muy bien los espacios de trabajo , lo que permite diseños de directorio de fuentes y activos muy flexibles.
  3. Soporta muy bien las listas de cambios .
  4. Puedes ver quién está trabajando en qué. Los juegos tienen un número anormalmente alto de archivos binarios (activos) que cambian rápidamente en comparación con otros proyectos de desarrollo. La mayoría de las veces no son fusionables, por lo que es esencial realizar un seguimiento de quién tiene qué / dónde / cuándo. Los clientes de Subversion y DSCC evitan intencionalmente esta técnica, pero es bastante beneficiosa en ciertas aplicaciones.
  5. Admite bases de código / activo gigantescas . No , no almacenar datos duplicados en las máquinas cliente, lo cual es importante cuando su sub-vista de árbol es un par de docenas de conciertos.

Dicho esto, es dolorosamente obvio casi a diario que Perforce no siente que su posición en la industria esté amenazada. Sus herramientas visuales, que incluyen P4V y P4SCC (integradas con Visual Studio) son lentas y con errores, y se sabe que esta última congela Visual Studio por puro placer. AnkhSVN está a millas de distancia de Perforce.

Comentario de xan: Sin embargo, vale la pena señalar que su herramienta de fusión, P4Merge (utilizada para diferenciar y fusionar) es excelente y muy superior a los gustos de Tortoise Merge. Sorprendentemente, este componente está disponible de forma gratuita como parte del paquete P4 Visual Tools.

Comentario de slicedlime: Otro inconveniente de Perforce es que ramificarse en él tiende a ser un gran dolor, especialmente si tienes árboles grandes. Casi todas las demás vcs son mejores para bifurcar y fusionar. Sin embargo, este suele ser un pequeño precio a pagar por las ventajas anteriores.

Comentario de roe: Perforce es extremadamente hablador. No sucede mucho sin el servidor involucrado. En particular, necesita el servidor para abrir para editar, lo que significa que debe saltar algunos aros si tiene la intención de romper la conexión con el servidor.

Comentario de jrista: Como usuario diario de Perforce durante más de dos años, con un equipo extendido de desarrollo e ingeniería de calidad de más de 100 personas, me he familiarizado íntimamente con él. Si bien es un sistema de control de fuente decente, tiene sus inconvenientes que aquellos que evalúan los sistemas SCC deben tener en cuenta:

  • Como lo mencionaron otros, la ramificación / integración es particularmente engorrosa y difícil de hacer. Tienes una cantidad impía de control, pero tiene el costo de una complejidad excesiva. Por otro lado, la herramienta de combinación visual es única y presenta una hermosa vista de combinación "basada" en tres archivos de su trabajo. Perforce proporciona algunas visualizaciones gráficas de rutas de ramificación (llamadas Gráfico de revisión), sin embargo, la forma en que se visualiza a menudo hace que la herramienta sea bastante inútil. Si solo necesita ver un segmento de tiempo muy pequeño para uno o muy pocos archivos, puede ser útil ... algo más, y es casi imposible navegar por el Gráfico de Revisión.
  • Perforce tampoco es una herramienta muy eficiente, ya que casi cualquier operación de archivo requiere la duplicación de archivos y datos: ramificación, etiquetado, listas de cambio, etc. No hay etiquetas o ramificaciones dispersas o livianas aquí. Si no tiene miedo de utilizar una enorme cantidad de espacio en el disco para realizar un seguimiento de sus cambios, es probable que la fuerza le sirva bien. Si no, buscaría otra herramienta.
  • Perforce utiliza espacios de trabajo, sin embargo, estos pueden ser frustrantes a veces, ya que forzosamente almacena en caché todo el estado en su espacio de trabajo, en lugar de usar los archivos reales en el disco para determinar algún estado. Esto a menudo hace que los archivos no se sincronicen porque su espacio de trabajo dice que están actualizados, cuando, por alguna razón, los archivos físicos en el disco NO están actualizados.
  • Una molestia final, Perforce es bastante brutal en su red. Es un programa extremadamente hablador y consume una cantidad considerable de ancho de banda. Cualquier pérdida de conectividad de red, y corre el alto riesgo de no poder hacer ningún trabajo con sus archivos controlados por fuente hasta que se restablezca la conectividad. Hasta el momento, no he descubierto una actividad que se pueda realizar sin conexión en Perforce.
280Z28
fuente
2
Otra ventaja de Perforce es que es gratis para los dos primeros usuarios, lo cual es ideal para pequeños proyectos de pasatiempo, o dos evalúan su idoneidad para un proyecto más grande.
Desde mi experiencia, el punto 5 de su respuesta es muy cierto. Es extremadamente escalable. Los errores son raros, el soporte es rápido. No está seguro del costo, Yacine señala que es gratis para los dos primeros usuarios. Para estudios más pequeños con juegos más pequeños, valdría la pena evaluar otras opciones. La integración de Visual Studio está un poco fuera de la caja; pero tenemos la suerte de contar con un entusiasta completo de Perforce en nuestro estudio que escribe un excelente proveedor fuente para VS desde cero.
paulecoyote
Perforce es increíble, si puedes permitírtelo. No he usado todos los sistemas de control de versiones, pero en 10 años de desarrollo comercial de juegos y varios sistemas de control de versiones, es el mejor que he usado con bastante margen. Maneja archivos de datos grandes de manera rápida y confiable, y si está configurado correctamente, funciona bien en una configuración de sitios múltiples a través de conexiones a Internet relativamente lentas. La integración de Visual Studio puede no ser perfecta, pero es bastante sólida.
bluescrn
1
Si tuviera que elegir un VCS para el desarrollo de juegos (a gran escala), sería Perforce. Si pudiera elegir múltiples, agregaría un DVCS para los activos de texto (código, scripts y otros archivos de datos misceláneos) pero conservaría Perforce para los activos binarios.
dash-tom-bang
2
Trabajé en un gran proyecto de juego que usaba Perforce y estaba completamente desconcertado de que alguien lo pagara. La necesidad de estar sincronizado con el servidor es desagradable, incluso en una LAN. Entiendo la función "conciliar el trabajo fuera de línea", pero en la práctica el flujo de trabajo es tan intrusivo que cuando hay problemas de red simplemente no funciona. Si no utiliza un IDE que tiene un complemento P4, o si solo desea editar un archivo aquí y allá desde la línea de comandos u otra herramienta, debe volver al cliente P4 y hacer un poco de contabilidad. Ningún otro VCS pone tantas barreras para hacer el trabajo.
Suboptimus
27

Subversión

  • Código abierto, centralizado

  • Archivos Blender: no estoy completamente seguro de si los archivos .blend son binarios (lo parecen), pero no he tenido problemas para agregarlos a Subversion. Después de hacer algunos experimentos, el aumento del tamaño del archivo para los archivos modificados parece nominal, por lo que no se trata simplemente de copiar todo el archivo.

  • Proyectos grandes: funciona, aunque puede volverse peculiar. Definitivamente puede manejar repositorios de al menos 5,5 GB (tamaño total del directorio de repositorios en el servidor; principalmente activos binarios).

  • Datos duplicados en el cliente: Subversion mantiene una copia duplicada de cada archivo en el espacio de trabajo del usuario como una copia prístina. La ventaja de esto es que puede hacer un diff o revertir sin volver al servidor. La desventaja es que sus 10 gigas de archivos de trabajo requieren 20 gigas de espacio en disco.

  • La lista de ignorados es una propiedad de un directorio (simple con una interfaz gráfica de usuario, molesto en la línea de comandos).

  • Subversion permite el bloqueo de archivos / activos, lo cual es realmente útil si varios artistas y diseñadores trabajan en los mismos archivos.

  • Los externos son una excelente manera de manejar código compartido (por ejemplo, biblioteca o base) entre proyectos.

Cyclops
fuente
Grandes proyectos - KDE, GNOME.
Matias Valdenegro
* FSFS puede ser muy frágil para la recuperación, por lo que se debe tener especial cuidado con las copias de seguridad. * Fácil de entender, TortoiseSvn es un gran cliente. * Los rastreadores de errores de código abierto, los sistemas de integración continua, etc. a menudo tienen soporte para Subversion "listo para usar". * Hay algunos buenos libros disponibles sobre el uso de Subversion.
paulecoyote
1
@paulecoyote, esta es una publicación de wiki, siéntase libre de editarla con nueva información, no solo comentarios.
Cyclops
1
SVN es ideal para usar con Tortoise SVN ( tortoisesvn.net ), un cliente que se integra muy bien en el menú contextual y proporciona guis para todas las acciones. Sin lugar a dudas, la tortuga no tiene puertos Linux / Mac OS (al menos de escribir esto). Protip: si trabaja con varias personas, actualice siempre (y combine / resuelva conflictos) ANTES de comprometerse.
Exilyth
7

AlienBrain

De Avid :

Alienbrain es un sistema de gestión de activos digitales para artistas en la industria del entretenimiento.

  • Comercial (más caro que Perforce), centralizado
  • Diseñado para integrarse con otras herramientas profesionales de flujo de trabajo 2D y 3D como Photoshop, Maya, 3ds Max, Microsoft Visual Studio, etc.

Tengo ninguna experiencia con Alienbrain, y sólo enteré del libro Juego de codificación completa de Mike McShaffry. Sin embargo, parece pensarlo bien:

Los artistas y otros colaboradores realmente usarán este producto, a diferencia de otros que están diseñados principalmente para integrarse bien con Visual Studio y no con aplicaciones creativas como Photoshop y 3D Studio Max. Uno de los grandes inconvenientes de otros productos es su tratamiento bastante ingenuo de los archivos sin texto. AlienBrain fue escrito con estos archivos en mente.

Por supuesto, él también lo describe como:

Para aquellos de ustedes con problemas de seguimiento de activos realmente serios y presupuestos igualmente serios ...

Cíclope
fuente
¡SI! Finalmente, quien lo obtiene: ¡los activos y el código necesitan diferentes herramientas! +1
jacmoe
3
Mi experiencia con AlienBrain es que los autores no obtienen desarrollo de juegos. No es una solución robusta de control de fuente. Algunas de las características son agradables para algunos miembros del equipo, pero algunas de las mejores características anunciadas no se implementan de tal manera que sean útiles (por ejemplo, la interfaz de preparación, donde alguien puede registrar sus activos "para su revisión". Desafortunadamente no hay forma de saber qué se revisa y qué no, y cuando sincronizas lo obtienes de todos modos). Además, no almacena nada, por lo que una sincronización requiere probar cada archivo. Esto es lento con muchos conciertos de activos. :)
dash-tom-bang
Lo único útil de AlienBrain es la ventana de vista previa que funciona con archivos Max. Todo lo demás es basura total.
Tenpn
1
No estoy seguro de cuán constructivo es esto, ya que no es una experiencia de primera mano, pero he trabajado en un par de proyectos que habían estado usando AlienBrain antes de trabajar en el proyecto, y ya no lo usaban, y nadie tenía cosas buenas que decir sobre eso. Mi recuerdo de haber leído al respecto y de hablar de boca en boca es que estalló en la escena, sonaba realmente genial y algunas personas que podían permitírselo lo intentaron y finalmente se dieron cuenta de que era un error.
Suboptimus
3

Team Foundation Server

de Microsoft

  • Comercial
  • Centralizado
  • Se integra muy bien con Visual Studio
  • Buena integración de Windows Explorer para usuarios no VS (es decir, artistas)
  • Admite conjuntos de cambios "archivados", que es algo análogo a 'esconder' en git, pero sube al servidor; también puede hacer públicos estos conjuntos de estanterías para permitir que otros usuarios los integren por usted.
  • Desde 2012 tiene unos flujos de trabajo de revisión de código muy buenos integrados directamente en Visual Studio
  • La última versión de la herramienta de fusión es muy buena. La fusión automática funciona bastante bien.
  • Admite archivos grandes y secundarios muy bien (obviamente, no puede fusionarlos)
  • Muy buen servidor de compilación
  • Admite registros cerrados, que permiten evaluar la calidad de un conjunto de estanterías (a través de compilaciones automatizadas, pruebas unitarias, análisis de código) antes de comprometerse con el repositorio.
  • Muy buenas herramientas de gestión de proyectos (no estrictamente características de control de código fuente, pero realmente útiles), que proporcionan la trazabilidad desde los requisitos de alto nivel hasta el código.

He usado TFS ampliamente en proyectos de simuladores MILSPEC, y es bastante bueno. Probablemente no sea el mejor si estás en una Mac, aunque hay un complemento de eclipse en estos días. La versión alojada en la nube admite repositorios git para el back-end de control de código fuente.

Es gratis para hasta cinco usuarios en Visual Studio Online (permite código cerrado; no hay límites de tamaño de repositorio), donde está alojado en la nube. Si desea alojarlo localmente, puede ser costoso.

Lo que más me gusta de él son las características de administración de ingeniería de software y el hecho de que maneja archivos grandes y archivos binarios con bastante felicidad.

guysherman
fuente
1
El nuevo Visual Studio Online es gratuito para hasta 5 usuarios y está alojado en la nube (bien respaldado, etc.). Puede hacer TFS o Git con él. Genial para el desarrollo de juegos independientes.
Robert Fraser