Pregunta

Tengo dos subdirectorios cada uno con un repositorio, por lo tanto:

PPP/
 |--ABC/
 |   |--.git/
 |   |--AAA/
 |   |    BBB/
 |   |   CCC/
 |   
 |--DEF/
 |   |--.git/
 |   |--DDD/
 |   |--EEE/

Y me gustaría combinarlos en un repositorio, por lo tanto, asumiría que la estructura del directorio sería así:

PPP/
 |--.git/
 |--ABC/
 |   |--AAA/
 |   |--BBB/
 |   |--CCC/
 |   
 |--DEF/
 |   |--DDD/
 |   |--EEE/

¿Es esto posible?

También actualmente varias personas tienen repositorios en sus máquinas. ¿Cuánto más complicado hace eso la vida?

Ta.

¿Fue útil?

Solución

Puedes hacer lo que estás describiendo así:

  1. Mueva el contenido de ABC a un subdirectorio ABC / y corrija el historial para que parezca que siempre ha estado allí:

    $ cd /path/to/ABC
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&ABC/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    Ahora su estructura de directorio es ABC/ABC/your_code

  2. Lo mismo para el contenido de DEF :

    $ cd /path/to/DEF
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&DEF/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    Ahora su estructura de directorio es DEF/DEF/your_code

  3. Finalmente, cree el repositorio PPP y coloque ABC y DEF en él:

    $ mkdir /path/to/PPP
    $ cd /path/to/PPP
    $ git init
    $ git pull /path/to/ABC
    $ git pull /path/to/DEF
    

    Ahora tiene PPP / ABC / your_code y PPP / DEF / your_code , junto con todo el historial.

Probablemente debería pedirles a sus colegas que ejecuten los comandos anteriores en su sistema, para que todos estén sincronizados.

  

Nota: los comandos funky filter-branch proviene de la página de manual . :-)

Otros consejos

¿Realmente necesita fusionar los dos repositorios existentes en un solo repositorio, o simplemente desea agruparlos?

Si solo quiere agruparlos, entonces git-submodule hará lo que quiera: terminará con tres repositorios donde el nivel superior se vincula con los dos actuales.

Como guía:

  • Debe fusionarlos en un único repositorio si va a aumentar el acoplamiento entre ellos para que ya no tenga sentido usar una versión del repo A con una versión diferente del repo B.

  • Debería usar submódulos si permanecen algo separados (a veces tiene sentido trabajar en uno de forma aislada), pero desea la conveniencia de poder trabajar con ellos juntos (por ejemplo, descargue ambos a la vez, punto de control estados bien conocidos en ambos, etc.).

El uso de submódulos evitará problemas con las copias existentes de los repositorios, ya que el historial no cambia. Fusionarlos creará una nueva historia y será más difícil para las personas que trabajan desde las sucursales existentes fusionar sus cambios.

Para mí, parece difícil hacer lo que quieres porque el historial de ambos proyectos no se fusionará.

Mi mejor consejo sería crear un nuevo repositorio para contener ABC y DEF, manteniendo el antiguo repositorio de estos dos para tener una copia de respaldo del historial y comenzar un nuevo historial con este nuevo proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top