¿Debo include configure y makefile en un repository github?

Recientemente pasamos de subversion a git, y luego a Github, para varios proyectos de código abierto. Github fue agradable ya que proporcionó mucha funcionalidad. Una de las cosas que me gusta especialmente es la capacidad de download tags como files zip o .tar.gz .

Lamentablemente, Github descontinuó recientemente las descargas. Eso no debería ser un problema debido a la capacidad de download tags. Sin embargo, en el pasado no hemos incluido un Makefile , configure secuencia de commands de configure ni ningún otro file generado automáticamente en el repository porque tienen muchos conflictos cuando las personas se fusionan.

¿Cuál es la forma correcta de manejar esto?

  • ¿Debería poner autoconf y los files generados por automake en el repository para que las personas puedan download las tags directamente?
  • ¿O debería haber un file bootstrap.sh y se les dice a las personas que lo ejecuten?
  • ¿O debería hacer un make dist y poner eso en el repository?

Gracias

El segundo es mejor: quiere que cualquier usuario de su repos vuelva a estar en funcionamiento lo más rápido posible, volviendo a generar lo que necesita para build su progtwig.

Dado que Git es en gran medida un control de versiones para text (a diferencia de un repository de artefactos como Nexus ), proporcionar una forma de generar el binary final es el path a seguir.

Publique la salida de make dist través de las versiones de GitHub

Su primera opción, colocar los files generados por Autoconf y Automake en el repository, no es una buena idea. Casi nunca es beneficioso almacenar los files generados en el control de la fuente . En este caso, va a contaminar su historial con una gran cantidad de confirmaciones innecesarias y potencialmente conflictivas, especialmente si no todos sus queueboradores están usando la misma versión de Autotools. Su tercera opción, verificar en el resultado de make dist es una mala idea por exactamente las mismas razones que la primera opción.

Su segunda opción, agregar un script "bootstrap" que llame a Autoconf y Automake para generar los scripts de configure , también es una mala idea. Esto anula todo el propósito de Autotools, que es hacer que su fuente sea portátil en todos los sistemas, incluidos aquellos para los que Autotools no está disponible. (Considere lo que sucedería si alguien quisiera build e instalar su software en una máquina en la que no tienen acceso de root, y donde no está instalado el GNU Build System. Una secuencia de commands bootstrap no los va a ayudar porque primero necesita realizar una installation local de Autotools y posiblemente todas sus dependencies).

La forma correcta de liberar código que usa Autotools es producir un tarball con make dist (o mejor aún, make distcheck , ya que esto también ejecutará testings y hará otras comprobaciones de cordura), y luego publicará este tarball en algún lugar que no sea el repository de origen .

Su pregunta original, de abril de 2013, establece que GitHub suspendió las páginas de descarga. Sin embargo, en julio de 2013, GitHub agregó una function de "Versiones" que no solo preempaca sus tags fuente, sino que también le permite adjuntar files arbitrarios a cada versión. Por lo tanto, en GitHub, la página de Releases es donde debe publicar sus make dist (y preferiblemente también las firmas GnuPG separadas de ellos).

Pasos básicos

  1. Cuando esté listo para hacer una publicación, $ git tag 1.0 # Also use -s if desinetworking $ git push --tags la label en GitHub: $ git tag 1.0 # Also use -s if desinetworking $ git push --tags
  2. Usa tu Makefile para producir un tarball: $ make dist # Alternatively, 'make distcheck'
  3. Visita la página de GitHub para tu proyecto y sigue el enlace de "lanzamientos": Captura de pantalla de un proyecto de GitHub que muestra la ubicación del enlace de las versiones
  4. Serás llevado a la página de lanzamientos para tu proyecto. La primera vez que visita, todo lo que verá es una list de tags y tarballs producidos automáticamente desde el tree fuente: Página de lanzamientos de GitHub Presiona el button "Draft a new release".
  5. A continuación, se le presentará un formulario en el que debe completar la label de Git asociada con el lanzamiento y un título y una descripción opcionales. Debajo de esto también hay un selector de files con la label "Adjuntar binarys al soltarlos aquí o seleccionarlos". Use esto para cargar el tarball que creó en el Paso 2 (y tal vez también una firma GnuPG separada de él). Redacción de una versión de GitHub Cuando termine, presione el button "Publicar lanzamiento".
  6. La página Versiones de su proyecto ahora mostrará la versión, incluidos enlaces de descarga prominentes para los files adjuntos: Página de lanzamiento completada de GitHub

Si no desea utilizar versiones de GitHub, como se señaló en una respuesta anterior , debe cargar los files de tar en otro lugar, como su propio website o FTP. Agregue un enlace a este repository desde el README.md de su proyecto para que los usuarios puedan encontrarlo.

Cuando corte un lanzamiento, cargue el resultado de make distcheck en la página de descarga de su proyecto: es un objective de file que construye el tarball y verifica que instala, desinstala, pasa las testings y otras comprobaciones de cordura. Github está mal dirigido no es una excusa: crea un tree como este en tu repository:

 / /source /source/configure.ac /source/Makefile.am /source/... /releases /releases/foo-0.1.tar.gz /releases/... 

Para los desarrolladores, no debería haber generado files en el control de fuente. Muchos proyectos autotooled modernos arrancan bien una invocación de autoreconf -i .