Esta es una pregunta que parece surgir de manera semi-frecuente, pero lamentablemente aún no he encontrado una respuesta que pueda aplicar completamente a mi situación, así que pensé que haría mi propia pregunta . Esta es mi primera pregunta sobre SO, así que se agradable. : PMúltiples repositorios en un directorio
El "problema": Nuestra empresa desarrolla múltiples aplicaciones PHP, sin embargo una de esas aplicaciones es un "maestro" de clases. Todas nuestras otras aplicaciones están instaladas dentro de esta "aplicación maestra" y requieren que la aplicación maestra funcione.
Usamos control de versiones para administrar estas aplicaciones, por supuesto.
Si bien muchos de los archivos en nuestras aplicaciones de complemento están en subdirectorios, no todos son. Esto significa que no podemos usar la importación de subdirectorios (svn externos, submódulos de git, etc.). Por ejemplo, dentro de la carpeta raíz hay varias carpetas (admin, public, kernel, etc.) y las aplicaciones addon tienen archivos dentro de una o más de estas carpetas; no son independientemente independientes dentro de la estructura de directorios de la aplicación maestra. .
Actualmente utilizamos SVN y recientemente nos encontramos considerando git debido a algunas de las funciones disponibles que creemos que podrían ser útiles para nosotros. Sin embargo, una cosa que no entiendo con git es si realmente hay una forma de "fusionar" (no en el sentido de control de la versión) estos repositorios en un solo directorio localmente cuando los desarrolladores están trabajando en el código. No he encontrado una manera de hacer esto con SVN tampoco.
En un mundo ideal, tendríamos un repositorio para nuestra aplicación "maestro" con una estructura de este modo:
- /
- --file1
- --file2
- -/admin
- ---- fichero1
- ---- fichero2
- -/pública
- ---- fichero1
Nuestra aplicación complemento tendría una estructura como tal (recuerda, tenemos múltiples aplicaciones de montaje anexo):
- /
- --filex
- -/admin
- ----/miaplicacion
- ------ fichero1
- ------ fi le2
- -/pública
- ---- ArchivoX
Hemos experimentado con los siguientes enfoques, cada uno con sus propias advertencias:
- Todas las aplicaciones en un único repositorio. Esto es menos que ideal ya que se convierte en una pesadilla manejando versiones para cada aplicación de manera efectiva (especialmente en SVN). La ramificación y el etiquetado llevan archivos de aplicaciones independientes y no relacionadas.
- Todas las aplicaciones en un repositorio separado. Esto tampoco es ideal (bueno, es desde una perspectiva de administración/organización) porque no se pueden exportar dos repositorios separados a una única carpeta, por lo que siempre se trabaja con una salida de un repositorio y una exportación de otros. Si está trabajando en la aplicación X y hay cambios en nuestra aplicación maestra, debe realizar manualmente una nueva exportación de esa aplicación maestra y copiar los archivos en el repositorio de la aplicación X en el que está trabajando para tener el último código de estructura.
¿Hay alguna manera con git o SVN (o cualquier otro sistema de control de versiones para el caso) de permitir más de un repositorio dentro de un solo directorio sin usar subdirectorios? SVN Externals es casi perfecto, pero tiene el requisito de que todos los archivos en el repositorio externo estén en una subcarpeta separada, que como se describe arriba no nos funciona. Entiendo que git tiene capacidades equivalentes, pero de nuevo no puede permitir más de un repositorio en una sola carpeta, dejándonos con el mismo problema.
preguntas relacionadas: Multiple repositories in one directory (same level) - is it possible? - esto es muy cercano a lo que estoy pidiendo que pienso, pero no vi ninguna solución que me sentí podría aplicarse a nuestra situación.
con git, que suele hacer que tipo de cosas con ramas. Cada desarrollador puede tener uno o cada submódulo o cualquier combinación que se te ocurra. Cuando sientas que estás listo para fusionar tu rama con la rama maestra (o cualquier otra), lo haces. – Timo
Para ser más preciso : Puede tener una rama para la aplicación maestra y definir las ramas de los módulos en función de eso: heredan la estructura del directorio, pero lo que sea que ponga en ellas permanece allí. La desventaja es que no puede trabajar con múltiples ramas a la vez: necesita todavía los comprueban individualmente, pero todo, de hecho, estará en un directorio y usted puede mover cosas de una rama a otra con bastante facilidad. – Timo
+1 para mudarse a git. O al menos considerándolo. –