Control de versiones para modules interdependientes

¿Cómo rastrear y administrar las dependencies de los modules de software bajo control de versión?

Estoy construyendo varios sitios web, cada uno de los cuales usa una configuration particular de Apache, un código de Django particular, una biblioteca de Python compartida y algunos Javascript compartidos. Para cada sitio estas piezas son interdependientes: si el código del server cambia, el Javascript podría cambiar con él, o viceversa.

Podría poner todo en un solo proyecto, pero parece difícil de manejar. Pero si los pongo en proyectos separados, entonces tengo que rastrear las dependencies de los elementos por versión. "DjangoStuff v. 14 funciona con Javascript v. V.20, pero no v.21. JavaScript v v.1 funciona con DjangoStuff v.15".

¿Cuál es el mejor enfoque aquí? Estoy usando Subversion. (He escuchado rumores de que ya no es genial, pero satisface mis necesidades y preferiría seguir por el momento).

Usando Externals en Subversion, puede hacer que su proyecto maestro se refiera a todos los proyectos de dependencia. Por defecto, una reference externa en Subversion se refiere a cualquiera que sea la versión actual, pero puede agregar una reference externa que haga reference a una versión específica de otro repository (usando la notación -r como en el ejemplo "toolkit" en esa página).

svn:externals es una propiedad que configura en un directory para decirle a Subversion que extraiga materiales adicionales cada vez que se desprotege ese directory. Puedes especificar:

  • El mismo repository o uno diferente
  • Una revisión particular para tirar
  • Dónde colocar los materiales una vez que Subversion los agarra