Soy nuevo en autotools y estoy trabajando en un proyecto de C. Quiero agregar mi proyecto a un repositorio git. ¿Qué archivos generados por las autotools necesito rastrear en mi sistema de control de versiones y cuáles deberían ignorarse?¿Qué archivos generados por Autotools debo mantener en el repositorio de control de versiones?
Respuesta
No debe mantener ningún archivo bajo control de versiones que no se edite a mano. Eso significa que cualquier archivo generado debe ser ignorado por el sistema de control de versiones. Básicamente me puse solamente la siguiente bajo control de versiones:
configure.ac
Makefile.am
- la documentación de los archivos tales como
AUTHORS
, etc.NEWS
Makefile.am
en subdirectorios
Para abordar el punto de tener una versión "lista para instalar" presentada por Sch arron, algunas personas incluyen un script en el directorio raíz del proyecto, llamado bootstrap
o autogen.sh
, que ejecuta una vez cuando marca una copia nueva. Puede ver un ejemplo en uno de mis proyectos here.Para un proyecto más simple, su autogen.sh
realmente sólo tiene que consistir en una sola línea:
autoreconf --install || exit 1
aunque algunas personas prefieren correr ./configure
automáticamente al final de autogen.sh
.
¿Por qué no rastrear todos los archivos generados en el control de la versión? Debido a que sus contenidos dependen de la máquina en la que está construyendo, la versión de autotools con que los generó y la fase de la luna. En cualquier momento, cualquiera de estos cambios, los archivos de autotools generados cambiarán y obtendrá una gran cantidad de basura en sus commits. También se espera que cualquiera que verifique que su código no está en control de versiones para construirlo tenga instaladas las herramientas de desarrollo adecuadas, por lo que no tiene que preocuparse por las personas que tienen problemas debido a que faltan autotools.
Lo VonC dice acerca de proyectos de C viene con un archivo configure
para generar los Makefile
s es cierto para código fuente distribuciones (el archivo .tar.gz
que se obtiene cuando se escribe make dist
), pero no necesariamente para recién controladas copias de la versión controlar.
En general, no debe mantener los archivos generados en un repositorio (cosa que se vería cambios y tienen que comprometerse ellos/revertirlas). Sin embargo, si desea tener una versión "lista para instalar" agregada (= etiquetada) a su repositorio, recomiendo mantener los archivos de configuración y Makefile. Son los necesarios para una instalación, que deberían funcionar sin autotools.
Usted absolutamente no puede poner Makefile en el repositorio. Existe cierto debate sobre si incluir o no Makefile.in's en el repositorio (no deberían serlo, ya que las versiones 'listas para compilar' solo necesitan existir como tarballs), pero es absolutamente incorrecto poner Makefiles en el repositorio. El objetivo de configure script es construir Makefile's (et al) específico para una máquina en particular, y los Makefile's son susceptibles de ser diferentes dependiendo de la plataforma. Nada generado por la configuración puede estar en el repositorio –
Nota: Estoy de acuerdo con ptomato 'ss answer, y dejé esta respuesta como Comunidad Wiki.
Tiene sentido para las distribuciones de código fuente, pero su proyecto puede no ser uno.
Para fines de desarrollo, la respuesta de ptomato tiene más sentido.
Todos los proyectos de C generalmente viene con un archivo de configuración capaz de generar el Makefile real que se utiliza para la compilación.
Así que si tenemos en cuenta la cadena AutoTool, recomendaría versiones de todos los archivos generados hasta el archivo de configuración, ya que son normalmente una operación de generación de una sola vez.
Eso significa que cualquier persona con una copia desprotegida de su proyecto de versión se puede iniciar inmediatamente:
./configure
make
make install
Por lo tanto, si bien es cierto en general no debería versión de cualquier archivo generado, usted podría almacenado aquellos especialmente si el otro lector de ese proyecto puede:
- se benefician de no volver a generar los archivos (para un resultado idéntico)
- comience a configurar y compilar inmediatamente.
Creo que está confundido en cuanto a lo que es una distribución de código fuente; cada proyecto tiene uno, pero no es lo mismo que lo que se conserva en el control de la versión. Las distribuciones del código fuente deben incluir los archivos que _users_ necesitan para construir el proyecto; El control de versión debe contener los archivos que _developers_ necesitan para construir el proyecto. – ptomato
@ptomato: de nuevo, estoy de acuerdo. El caso es que sigo recompilando el proyecto de distribución del código fuente en estos días (pero no los desarrollo). De ahí mi visión "sesgada" de lo que podría ser en un VCS. – VonC
- 1. ¿Qué archivos generados por RubyMine debo confirmar?
- 2. Autotools y control de versión
- 3. control de versiones en archivos grandes
- 4. ¿Qué archivos generados por Visual Studio debo confirmar?
- 5. ¿Debo mantener mis archivos de proyecto bajo control de versión?
- 6. ¿Cómo se organiza el repositorio de control de versiones?
- 7. ¿Debo registrar los archivos del proyecto IDE en el sistema de control de versiones?
- 8. ¿Qué archivos de ReSharper debo conservar y qué archivos debo ignorar en Source Control?
- 9. Seguimiento de archivos de Excel en el Control de versiones
- 10. Qué tipos de archivos y carpetas se pueden ignorar para el control de versiones en MonoTouch
- 11. ¿Conectar remotamente mi repositorio de control de versiones de inicio?
- 12. Autotools archivos temporales
- 13. Control de versiones de archivos MDF
- 14. ¿Debo agregar el archivo TemporaryKey.pfx de mi aplicación Metro al control de versiones?
- 15. Archivos semi editables (por ejemplo, archivos de configuración) y control de versiones: ¿prácticas recomendadas?
- 16. Control de versiones para gráficos
- 17. ¿Qué sistema de control de versiones OSX/XCode debo usar para el desarrollo de iPhone?
- 18. ¿Qué significa "RTMREL" en el control de versiones de software?
- 19. MSTest Projects en Visual Studio: ¿qué archivos comprometer al control de versiones?
- 20. ¿Cuál es su forma de mantener las dependencias binarias en el sistema de control de versiones?
- 21. Sistema de control de versiones escalable (medio millón de archivos)
- 22. ¿Por qué evitar el bloqueo pesimista en un sistema de control de versiones?
- 23. ¿Qué tan lejos tomas el control de versiones?
- 24. ¿Qué tipos de archivos de Visual C++ deben comprometerse con el control de versiones?
- 25. Control de versiones para no programadores
- 26. Autotools: cómo limpiar los archivos creados por "./configure" en el proyecto lighttpd?
- 27. ¿Por qué NO DEBO usar el GAC?
- 28. Librería Autotools y control de salida de archivo de objeto
- 29. ¿Cómo funciona el control de versiones?
- 30. ¿Qué poner bajo control de versión?
Estoy de acuerdo. +1 (y pongo mi respuesta como Wiki de la comunidad) – VonC
Si agrega cualquier macro personalizada en el directorio m4, estos también deben ser agregados. – ext
Gracias por la respuesta y los consejos :) Aunque quería que mi proyecto estuviera en un formato directamente instalable, pero creo que hacer una secuencia de comandos como autogen.sh es una mejor opción. –