studio - ¿Puedo mover el directorio.git para un repositorio a su directorio principal?
instalar git en visual studio code (3)
Tengo dos subdirectorios, cada uno con un repositorio, así:
PPP/
|--ABC/
| |--.git/
| |--AAA/
| | BBB/
| | CCC/
|
|--DEF/
| |--.git/
| |--DDD/
| |--EEE/
Y me gustaría combinarlos en un repositorio, así que supongo que la estructura del directorio sería la siguiente:
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?
Ejército de reserva.
¿Realmente necesita fusionar los dos repositorios existentes en un repositorio, o simplemente desea agruparlos?
Si solo quieres agruparlos, entonces git-submodule hará lo que quieras: terminarás 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 repositorio A con una versión diferente del repositorio B.
Deberías usar submódulos si permanecen algo separados (a veces tiene sentido trabajar en uno de forma aislada), pero quieres la comodidad de poder trabajar con ellos juntos (por ejemplo, descargar ambos a la vez, punto de control conocido: buenos estados en ambos). , etc.)
El uso de submódulos evitará problemas con las copias existentes de los repositorios, ya que el historial no cambia. Combinarlos creará un nuevo historial 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 repo viejo de estos dos para tener una copia de seguridad de historial y comenzar una nueva historia con este nuevo proyecto.
Puedes hacer lo que describes de esta manera:
Mueva el contenido de
ABC
a un subdirectorioABC/
y arregle el historial para que parezca que siempre estuvo 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
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
Finalmente, cree el repositorio
PPP
y arrastreABC
yDEF
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
yPPP/DEF/your_code
, junto con todo el historial.
Probablemente deberías pedirles a tus colegas que ejecuten los comandos anteriores en su sistema, para que todos estén sincronizados.
Nota: los comandos funky
filter-branch
provienen de la página man . :-)