2012-01-31 31 views
7

Actualmente solo tengo un montón de archivos php en carpetas bajo control de fuente. Lógicamente tengo una colección de proyectos relacionados y una base de datos compartida.Organización de proyectos PHP

  • Project 1 es una aplicación web que interactúa con una base de datos.
  • El Proyecto 2 es algunos procesos en segundo plano que también interactúan con la misma base de datos.
  • El proyecto 3 es una biblioteca que incluye objetos de conexión de base de datos ampliados y otras funciones de utilidad.

Proyecto 1 y 2 dependen del código de la biblioteca.

que quieren dividir los proyectos en tres depósitos separados para que puedan ser desarrollados de forma independiente.

¿Cuál es la mejor manera de organizar los dos primeros proyectos por lo que dependen de la biblioteca, pero no necesitan su propia copia de la biblioteca en su árbol de fuentes?

¿Debo convertir la biblioteca en un paquete de PEAR y tienen ese paquete instalado sistema de ancho. O es mejor que los proyectos 1 y 2 sean 'compilados/implementados' en algún sentido e incluyan una copia de la biblioteca durante ese paso de compilación. Este enfoque implicaría el uso de algún tipo de herramienta de administración de compilación como Phing/PHP-Maven.

+1

¿Qué software de scm estás usando? ¿Qué hay de los enlaces simbólicos? – hakre

Respuesta

3

Mantener una copia del código fuente dentro del árbol no es una mala cosa. Le permite controlar cuándo pasa por las fases de actualización en lugar de que el sistema lo imponga en su aplicación. Es una situación bastante mala cuando necesita liberar su código y un cambio en la biblioteca ocurre justo antes, lo que le obliga a realizar cambios de última hora en el software que tuvo que activarse.

Si está utilizando la subversión, puede utilizar los externos para incluir el código de la biblioteca en su aplicación y bloquearlo en un determinado número de revisión. Actualizarlo es simplemente editar una propiedad para cambiar el número de versión y actualizar el código.

Otras herramientas de control de versiones pueden ofrecer funcionalidades similares. Algunos proyectos como Symfony2 también incluyen una secuencia de comandos para administrar dependencias, sin embargo, solo admiten git.

+0

Eso es un punto justo en realidad. Probablemente la mejor solución por ahora. Por lo que vale, estoy usando Mercurial. Tome el punto de no querer estar sujeto a lo que sea que sea la última versión de la biblioteca. – freshnewpage

+0

Hay un hilo sobre el uso de mercurial para esto. Parece que hay una extensión disponible. http://stackoverflow.com/questions/217523/can-i-emulate-svnexternals-using-mercurial –

1

Tal vez porque soy un usuario maven, preferiría declarar project3 como una dependencia de project1 y project2 y usar maven como la herramienta de gestión de compilación y resolución de dependencias (entre otras cosas). El problema de versión señalado por @ Louis-Philippe Huberdeau se puede evitar utilizando versiones y declarando que las dependencias son específicas de la versión: es decir, para proyectos de desarrollo pueden depender de project3-1.0-SNAPSHOT y para el lanzamiento la dependencia se convertirá en project3-1.0-RELEASE . De esta forma, los tres proyectos pueden evolucionar de forma independiente. Las versiones y el despliegue de los artefactos se pueden hacer por maven. Más tarde, si lo necesita, puede usar un servidor de CI, como Hudson o Travis CI.

+0

Me refería principalmente a señalar una ubicación fija en un disco duro. Las personas reflejas comunes tienen en PHP. –

+0

Sí, estoy tratando con ese reflejo común en C#: P Estamos usando svn externos en un C# heredado, pero me encantaría cambiar eso. – Diego

Cuestiones relacionadas