2010-07-20 11 views

Respuesta

59

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.

+0

Estoy de acuerdo. +1 (y pongo mi respuesta como Wiki de la comunidad) – VonC

+1

Si agrega cualquier macro personalizada en el directorio m4, estos también deben ser agregados. – ext

+0

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. –

-2

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.

+9

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 –

11

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.

http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Autoconf.svg/309px-Autoconf.svg.png

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.
+3

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

+1

@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

Cuestiones relacionadas