¿Debería almacenarse la documentación generada en un repositorio Git?


49

Cuando usa herramientas como jsdocs , genera archivos HTML estáticos y sus estilos en su base de código en función de los comentarios en su código.

¿Deben registrarse estos archivos en el repositorio de Git o deben ignorarse con .gitignore?


44
Puede haber un argumento para almacenarlos en un repositorio de GitHub ya que puede publicar el HTML estático usando páginas . Aunque luego surgen un conjunto completamente separado de argumentos sobre cómo asegurarse de que estén actualizados, etc ...
Boris the Spider

21
Si se generan archivos, entonces, por definición, no son fuente .
Chrylis -en huelga-

3
Publicas lo que quieres publicar. Especialmente en GitHub. Si desea que todos vean un PDF o una imagen generados, debe incluirlo en lugar de esperar que todos instalen LaTeX y lo compilen ellos mismos. Por ejemplo, este repositorio no sería muy bueno si no incluyera las imágenes producidas, solo los archivos del proyecto ...
Džuris


77
Como consumidor de bibliotecas de terceros, de las 10 veces que veo una biblioteca sin documentación en línea (ya sea en una subcarpeta del repositorio o vinculada desde el archivo Léame), haré clic y saltearé esas bibliotecas, las 10 veces . No voy a perder el tiempo con Doxygen durante media hora solo para ver si una biblioteca satisface mis necesidades.
Alexander

Respuestas:


131

En ausencia de cualquier necesidad específica, cualquier archivo que pueda construirse, recrearse, construirse o generarse a partir de herramientas de compilación utilizando otros archivos registrados en el control de versiones no debe registrarse. Cuando el archivo es necesario, puede (re) construirse desde el otro fuentes (y normalmente sería como algún aspecto del proceso de construcción).

Por lo tanto, esos archivos deben ignorarse con .gitignore.


44
Pero esto puede depender de las versiones de las herramientas de compilación o incluso de la disponibilidad de las herramientas de compilación (por ejemplo, para generar algunos archivos se requiere una versión anterior de una herramienta de compilación). ¿Cómo manejas eso? ¿Puedes abordarlo en tu respuesta?
Peter Mortensen

27
@PeterMortensen Si necesita un artefacto construido con una versión especial de herramientas buld, lo construye con la versión de herramientas de construcción que necesita. Tal necesidad es a) descubierta por usted mismo, en cuyo caso usted está solo; b) documentado en README ("Necesitará dos tener 2 versiones específicas de doxygen instaladas ..."); c) tratada por los scripts de compilación (comprueban las versiones de herramientas de compilación disponibles y actúan adecuadamente). En cualquier caso, el control de fuente es para fuentes, no para artefactos de compilación.
Joker_vD

2
Creo que esta respuesta solo es viable si un servidor de implementación continua construye y publica la documentación de manera fácilmente accesible. De lo contrario, hay un gran valor en "almacenar en caché" los documentos en el repositorio, para mejorar la accesibilidad. Ningún usuario debería tener que manipular sus scripts de compilación solo para ver la documentación de su software.
Alexander

44
@Alexander ¿También pondrías el binario construido en el repositorio? La documentación está construida. Usted toma la documentación compilada y la hace accesible en algún lugar.
1201ProgramAlarm

55
@ 1201ProgramAlarm "¿También colocarías el binario incorporado en el repositorio?" No, porque un binario construido tiene un valor inicial bajo para las personas que navegan por GitHub, en comparación con la documentación. "Tomas la documentación compilada y la haces accesible en alguna parte". Mientras esté alojado públicamente, visiblemente vinculado, entonces sí, eso es genial. Es probablemente el mejor caso.
Alexander

23

Mi regla es que cuando clono un repositorio y presiono el botón "construir", luego, después de un tiempo, todo está construido. Para lograr esto para su documentación generada, tiene dos opciones: o alguien es responsable de crear estos documentos y ponerlos en git, o documenta exactamente qué software necesito en mi máquina de desarrollo, y se asegura de presionar "construir" El botón construye toda la documentación en mi máquina.

En el caso de la documentación generada, donde cualquier cambio que realice en un archivo de encabezado debería cambiar la documentación, es mejor hacerlo en la máquina de cada desarrollador, porque quiero la documentación correcta todo el tiempo, no solo cuando alguien la ha actualizado. Hay otras situaciones en las que generar algo puede llevar mucho tiempo, ser complicado, requerir un software para el que solo tienes una licencia, etc. En ese caso, es mejor darle a una persona la responsabilidad de poner las cosas en juego.

@Curt Simpson: Tener todos los requisitos de software documentados es mucho mejor de lo que he visto en muchos lugares.


77
No documente qué software necesita alguien para la compilación (o al menos no solo documente): haga que el script de compilación le diga al usuario lo que le falta o incluso instálelo si es razonable. En la mayoría de mis repositorios, cualquier desarrollador competente a mitad de camino puede simplemente ejecutar ./Testy obtener una compilación u obtener buena información sobre lo que necesita hacer para obtener una compilación.
Curt J. Sampson

55
Realmente no estoy de acuerdo en que poner la documentación generada en git puede ser bueno en el caso que especifiques. Esa es la razón por la que tenemos artefactos y archivos.
Sulthan

Esa es tu regla y es una buena regla y me gusta. Pero otros pueden hacer sus propias reglas.
Emory

Creo que quiere decir "ejecutar un comando de compilación", ya que no habría ningún botón de compilación en su máquina. ... A menos que espere que toda la compilación se integre con un IDE, lo cual es totalmente irracional.
jpmc26

@ jpmc26 Me parece totalmente razonable tener toda la compilación integrada en un IDE. El botón de compilación en mi máquina es Command-B.
gnasher729

14

Estos archivos no deben registrarse porque los datos para generarlos ya están presentes. No desea almacenar datos dos veces (SECO).

Si tiene un sistema CI, quizás podría hacer que compile los documentos y los almacene para esa compilación / publíquelos en un servidor web.


4

Una ventaja de tenerlos en algún repositorio (ya sea el mismo o uno diferente, preferiblemente generado automáticamente) es que puede ver todos los cambios en la documentación. A veces, esas diferencias son más fáciles de leer que las diferencias del código fuente (específicamente si solo le importan los cambios de especificación, no la implementación).

Pero en la mayoría de los casos no es necesario tenerlos en el control de la fuente, como explicaron las otras respuestas.


1
Eso prácticamente requeriría un enlace previo a la confirmación en cada repositorio que se usa para crear confirmaciones. Porque si el proceso de generación de documentación no está completamente automatizado, obtendrá confirmaciones que tienen la documentación fuera de sincronización con el código. Y esas confirmaciones rotas dañarán la comprensibilidad más que la documentación no comprometida.
cmaster

1
Esto no tiene que estar en la etapa de confirmación. Podría ser fácilmente un trabajo posterior / CI / Jenkins publicarlos cada vez que se consideren dignos de almacenamiento. Esto puede ser cada compromiso, pero la decisión debe estar desacoplada en ausencia de una buena razón. O al menos así lo veo yo.
UNO

3

Ignorado De todos modos, querrá que los usuarios del repositorio puedan reconstruirlos, y elimina la complejidad de asegurarse de que los documentos estén siempre sincronizados. No hay razón para no tener los artefactos construidos agrupados en un solo lugar si desea tener todo en un solo lugar y no tener que construir nada. Sin embargo, los repositorios de origen no son realmente un buen lugar para hacer esto, ya que la complejidad allí duele más que la mayoría de los lugares.


2

Depende de su proceso de implementación. Pero confirmar los archivos generados en un repositorio es una excepción y debe evitarse, si es posible. Si puede responder las dos preguntas siguientes con , el registro de sus documentos podría ser una opción válida:

  • ¿Son los documentos un requisito para la producción?
  • ¿Su sistema de implementación carece de las herramientas necesarias para construir los documentos?

Si estas condiciones son verdaderas, probablemente esté implementando con un sistema heredado o un sistema con restricciones de seguridad especiales. Como alternativa, puede confirmar los archivos generados en una rama de lanzamiento y mantener limpia la rama maestra.


1
La confirmación de los archivos generados en una rama de lanzamiento no funciona en todas las situaciones, pero hay varios, especialmente con cosas como sitios web estáticos creados a partir de rebajas, donde esta es una excelente solución. Lo hago con la suficiente frecuencia como para crear una herramienta especial para generar fácilmente estas confirmaciones como parte del proceso de compilación.
Curt J. Sampson

2

Depende. Si esos documentos:

  • Debe ser parte del repositorio, como el readme.md, entonces se prefiere mantenerlos en el repositorio de git. Porque puede ser complicado manejar esas situaciones de forma automatizada.

  • Si no tiene una forma automatizada de construirlos y actualizarlos, como un sistema de CI, y está destinado a ser visto por la audiencia general, se prefiere mantenerlos en el repositorio de git.

  • Toma MUCHO tiempo construirlos, entonces es justificable conservarlos.

  • Están destinados a ser vistos para la audiencia general (como el manual del usuario), y lleva un tiempo considerable construirlos, mientras que sus documentos anteriores se vuelven inaccesibles (fuera de línea), entonces es justificable mantenerlos en el repositorio de git.

  • Están destinados a ser vistos para la audiencia general y tienen que mostrar un historial de sus cambios / evolución, podría ser más fácil mantener comprometidas las versiones anteriores del documento y construir / comprometer la nueva vinculada a la anterior. Justificable.

  • Tiene una razón específica aceptada para que todo el equipo se comprometa, entonces es justificable mantenerlos en el repositorio de git. (No sabemos su contexto, usted y su equipo sí)

En cualquier otro escenario, debe ignorarse con seguridad.

Sin embargo, si es justificable mantenerlos en el repositorio de git, podría ser un signo de otro problema mayor que enfrenta su equipo. (No tener un sistema de CI o problemas de rendimiento horribles similares, enfrentarse al tiempo de inactividad mientras se construye, etc.)


1

Como principio del control de versiones, solo los "objetos primarios" deben almacenarse en un repositorio, no los "objetos derivados".

Hay excepciones a la regla: a saber, cuando hay consumidores del repositorio que requieren los objetos derivados y se espera razonablemente que no tengan las herramientas necesarias para generarlos. Otras consideraciones influyen, ¿es la cantidad de material difícil de manejar? (¿Sería mejor para el proyecto simplemente hacer que todos los usuarios tengan las herramientas?)

Un ejemplo extremo de esto es un proyecto que implementa un lenguaje de programación poco común cuyo compilador está escrito en ese lenguaje (ejemplos bien conocidos incluyen Ocaml o Haskell) Si solo el código fuente del compilador está en el repositorio, nadie puede construirlo; no tienen una versión compilada del compilador que puedan ejecutar en la máquina virtual, de modo que puedan compilar el código fuente de ese compilador. Además, las características más recientes del lenguaje se usan inmediatamente en la fuente del compilador en sí, por lo que siempre se requiere cerca de la última versión del compilador para compilarlo: un ejecutable del compilador de un mes de antigüedad obtenido por separado no compilará el código actual porque el código usa funciones de lenguaje que no existían hace un mes. En esta situación, es casi seguro que la versión compilada del compilador debe registrarse en el repositorio y mantenerse actualizada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.