2010-07-03 10 views
7

Tengo varios proyectos que crean bibliotecas reutilizables. Todos estos proyectos están bajo control de fuente.Uso de bibliotecas controladas por origen en proyectos controlados por origen

Cuando utilizo estas bibliotecas en un proyecto, simplemente enlace a la misma versión ONE en mi disco local. Sin embargo, como se puede imaginar, esto puede causar problemas cuando confirmo mi compromiso, y un desarrollador diferente intenta clonar el repositorio.

¿Cuál es la mejor práctica al usar componentes también bajo control de fuente? ¿Debo incluir los "proyectos de biblioteca" en el control de fuente del "proyecto principal"? ¿Esto causará problemas?

NB: Las bibliotecas toman bastantes directivas de compilación por lo que es casi imposible simplemente compilar una versión estática y un enlace a eso. Además, sigo desarrollándolos en paralelo.

Respuesta

5

de Ulrich Drepper Usted tiene dos tipos principales de dependencias:

  • dependencias de origen (es necesario incluir, dentro de las fuentes de su proyecto, fuente de otro proyecto) ,
  • dependencias binarias (debe incluir un conjunto de archivos empaquetados, como los que se encuentran en una biblioteca compartida).

Si, cuando se dice "Yo uso estas bibliotecas en un proyecto", que quiere decir que necesita los binarios en orden para que su proyecto para compilar, entonces usted podría almacenar dicho binarios en un repositorio externo (es decir, no una (D) VCS como Mercurial, pero un artifact repository like Nexus)

Pero si quiere decir que necesita incluir fuentes, porque también está realizando algunas evoluciones en esas bibliotecas mientras las usa para desarrollar su proyecto, entonces Mercurial subrepos se adaptan mejor.

0

En mi propia experiencia, mantener la compatibilidad con las bibliotecas que está escribiendo simultáneamente se mejora drásticamente mediante el uso de mapas de exportación para proporcionar múltiples versiones de sus interfaces a los programas del cliente. La mejor guía que conozco es http://people.redhat.com/drepper/dsohowto.pdf

0

Si las bibliotecas están bajo el control de su fuente, la vida debería ser fácil. Lo que tiendo a hacer es lo mismo que hago para diferentes versiones de bibliotecas de terceros: tener diferentes carpetas para diferentes versiones.

La tercera estructura de carpetas de la biblioteca partido tiene el siguiente aspecto:

- General 
    - Delphi 
    - Components 
     - LibX 
     - LibX 9.2.1.3890 
     - LibX 10.1.0.7151 
     - LibY 
     - LibY 3.6 
     - LibY 5.1 
    - Plugins 

Todos y cada proyecto se define dependencias de versiones específicas de cada biblioteca. Volviendo a una versión anterior de un proyecto, también revierte la dependencia a versiones anteriores de la biblioteca (s).

Ahora con las bibliotecas de terceros generalmente no tiene tantas versiones diferentes como puede hacer con sus propias bibliotecas, pero se aplican los mismos principios. Y para ayudar en el "desarrollo actual", donde todavía no tiene un número de versión particular, simplemente podría tener una versión "principal". Luego, cuando "libere" una versión de su biblioteca, solo agregue la carpeta de esa versión y ajuste las definiciones del proyecto que hasta ahora usaron la "cabeza" debido al desarrollo paralelo, para depender del nuevo número de versión ...

Cuestiones relacionadas