Estructura del tree de la carpeta del proyecto SVN frente a la estructura del tree de la carpeta de producción

Al desarrollar una aplicación web PHP + JS siempre tratamos de separar grandes bloques de código en pequeños modules / componentes, para hacer que estos últimos sean lo más reutilizables posible en otras aplicaciones.

Digamos que ahora tenemos:

  1. EcommerceApp (una aplicación principal de comercio electrónico)
  2. un componente Server-file-mgr (un componente para ver / administrar el file en el server)
  3. un Mylib (una biblioteca de funciones útiles)
  4. una MailistApp (otra aplicación principal para manejar lists de correo)

  • EcommerceApp necesita el componente Server-file-mgr y Mylib para funcionar
  • Server-file-mgr necesita que Mylib funcione
  • MaillistApp necesita tanto el componente Server-file-mgr como Mylib para que funcionen también.

Mi idea es simplemente estructurar el tree de carpetas del proyecto SVN poniendo todo en el mismo nivel:

 trunk/EcommerceApp trunk/Server-file-mgr trunk/Mylib trunk/MaillistApp 

Pero en la vida real para hacer que estas aplicaciones funcionen, la estructura del tree de carpetas debe ser la siguiente:

 EcommerceApp |_ Mylib |_ Server-file-mgr MaillistApp |_ Mylib |_ Server-file-mgr 

Quiero decir que Mylib y Server-file-mgr deben estar dentro de la carpeta EcommerceApp/MaillistApp .

¿Cómo estructuraría la carpeta SVN, como lo hice o de una manera diferente / mejor / más inteligente?

EDITAR: somoene en las respuestas a continuación sugirió estructurar SVN como carpetas de la vida real, pero luego tendría en SVN dos copys de la misma carpeta, es decir, tendría un trunk / EcommerceApp / Mylib y otra copy en trunk / MaillistApp / Mylib , ¿cómo los mantendría sincronizados?

Sugeriría el segundo (como en vivo real). Pero sugeriría crear "Módulos" separados para MyLib y Server-file-mgr (con su propio trunk / tags / branches) si se usan en otro lugar que no sea ese producto y usar svn: externals para vincularlos. Puede manejarlos como bibliotecas separadas.

EDITAR:

 trunk/ EcommerceApp |_ Mylib |_ Server-file-mgr MaillistApp |_ Mylib |_ Server-file-mgr 

Puede hacer lo siguiente con svn: externals: debe colocarlos en la carpeta Project / trunk.

 Project/ |_ trunk/ |_ EcommerceApp (link to MyLib->tags/RELEASE-1.0) |_ MaillistApp (link to Server-file-mgr->tags/RELEASE-1.0) |_ tags |_ branches MyLib/ |_ trunk |_ tags |_ RELEASE-1.0 |_ branches Server-file-mgr/ |_ trunk |_ tags |_ RELEASE-1.0 |_ branches 

Cada vez que está creando una nueva versión de MyLib o Server-file-mgr, simplemente puede cambiar el svn: external en Project / trunk. Entonces con esto tienes un desarrollo separado para tus componentes.

Puede usar enlaces simbólicos (si está en Linux), si el único requisito es poder acceder a ellos localmente desde los directorys de EcommerceApp y MaillistApp . SVN puede almacenar enlaces simbólicos correctamente.

 trunk/EcommerceApp |- Mylib -> ../Mylib |- Server-file-mgr -> ../Server-file-mgr trunk/Server-file-mgr trunk/Mylib trunk/MaillistApp |- Mylib -> ../Mylib |- Server-file-mgr -> ../Server-file-mgr