Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Git, crear subtree

6 de septiembre de 2014

Hola, estoy intentando hacer subárboles pero no se si es lo que quiero o si se puede hacer lo que quiero. Quiero hacer un Bundle para Symfony (bueno me gustaría hacer más de uno jaja). El tema es que quiero hacer algo así como hacen en Elcodi: tienen el proyecto en el repositorio Elcodi y luego un repositorio independiente por cada Bundle (ahora Componentes). Pero veo que toda la información de los commit están en ambos y no me sale o es que no entiendo el funcionamiento de esto.

Yo quiero hacer lo siguiente: quiero tener un proyecto con Symfony instalado. Este proyecto será una web demo con los bundles que cree y donde ir desarrollándolos. Pero quiero tener cada bundle separado de este proyecto en lo referido a repositorio ejemplo:

  • Repositorio Demo
  • Repositorio PrimerBundle
  • Repositorio SegundoBundle

Estos Bundles los quiero ir desarrollando en el proyecto Demo que creo que es como se debería hacer no?


Respuestas

#1

Se me olvidó, para todo esto estoy la traducción del libro oficial de git

Pero cuando hago un cambio en Demo sobre la carpeta de PrimerBundle, este no me sube los cambios al repositorio de PrimerBundle.

@AlbertoVioque

6 septiembre 2014, 0:09
#2

Crear subárboles a partir de un repositorio Git central y mantener todos los contenidos perfectamente sincronizados es bastante difícil. Si te interesa seguir el modelo de Elcodi, estás de suerte porque uno de sus creadores, Marc Morera, ha publicado en su cuenta de GitHub el script que utiliza para hacer los subárboles automáticamente:

#!/bin/bash
for i in $(ls -1 symfony.Elcodi/src/Elcodi/); do
    rm -rf elcodi.$i
    git clone [email protected]:elcodi/elcodi.git elcodi.$i;
    cd elcodi.$i;
    git filter-branch --prune-empty --subdirectory-filter src/Elcodi/$i;
    git remote rm origin
    git remote add origin [email protected]:elcodi/$i.git
    git push origin master
    git push --tags
    cd ..
done

En cualquier caso, si he entendido bien lo que quieres hacer, entonces creo que esta solución no es la correcta. La clave está en entender lo siguiente: un bundle sólo está bien hecho si puede funcionar de manera autónoma en un proyecto. Si PrimerBundle necesita del resto del proyecto para funcionar, entonces no es un bundle. Si SegundoBundle depende de PrimerBundle entonces tampoc es un bundle.

La solución sería la siguiente:

  • Si no quieres hacer bundles totalmente independientes, tendrás que añadir su código como parte de la aplicación y olvidarte de los bundles (sólo deberías tener un bundle llamado AppBundle, como puedes ver en esta aplicación Symfony de ejemplo).
  • Si quieres mantener la idea de los bundles, tendrás que refactorizarlos para que sean independientes y autónomos de verdad. Una vez conseguido, cada bundle va en su repositorio y no tienes que hacer subárboles ni complicarte con cosas raras de Git.

@javiereguiluz

6 septiembre 2014, 11:19
#3

Hola, gracias por responder, voy a ver ese script a ver si lo entiendo y puedo apañarlo.

Es que quiero crear bundles, pero independientes, unos bundles no dependen de otros, quiero tener una instalación de symfony y trabajar en ellos en esa instalación, pero claro quiero tener los repositorios de cada uno independiente, no juntos, es que veo los bundles en github y veo que solo están el bundle, no hay nada más de symfony y no se que proceso o como lo hacen para trabajar.

@AlbertoVioque

6 septiembre 2014, 11:46
#4

Yo la idea que siempre he tenido con el tema de bundles pero que no he sabido muy bien realizar es algo parecido creo... (git apenas se na)

Comento: Digamos que mi idea sería tener una especie de core con ciertas cosas que se usarían en la mayoría de los proyectos. Pero claro no se como organizar eso es decir... tener una web micore con el bundle core y luego cuando yo creo un proyecto miproyecto1 pues pueda usar ese bundle core y que si modifico algo en el también se modifique en el principal, al igual que tengo miproyecto2 pueda usar core, modificarlo y sincronizarlo..... Lo mismo con algun otro bundle que por ejemplo sobreescriba cosas del core ...

Es algo parecido a lo que aquí habéis hablado no?? Al final como lo has solventado?

Gracias.

@aprendizenlared

27 septiembre 2014, 19:54