Dividint un repositori Git en dos, preservant l'historial de commits

Vols separar el teu monorepo i mantenir l'historial de commits? Aquí t'explico com fer-ho, sense dolor.

Isaac RF
Isaac RF
2 minenesca
Vols separar el teu monorepo i mantenir l'historial de commits? Aquí t'explico com fer-ho, sense dolor.

El teu monorepo s’està fent massa gran? Potser vols separar el backend en el seu propi repo, però no vols perdre l’historial de commits. Aquí tens com fer-ho amb git filter-repo, sense drames. 🛠️

  • Separar el desenvolupament frontend i backend
  • Fer open source només una part del projecte
  • Arxivar o retirar un subprojecte
  • Mantenir-ho tot net

Exemple d’estructura de carpetes

Secció titulada Exemple d’estructura de carpetes

Suposa que tens un monorepo amb una carpeta backend i vols convertir-la en un projecte API independent.

Abans de dividir:

monorepo/
├── `backend`/
│   └── ...
├── frontend/
│   └── ...
├── docker-compose.yml
├── README.md
└── ...

Després de dividir (al nou repo):

api/
├── src/
├── config/
├── public/
├── .env
├── composer.json
├── README.md
└── ...

La carpeta backend i el seu contingut passen a ser l’arrel del nou repo API, amb tot l’historial de commits intacte.

  • git filter-repo (pip install git-filter-repo)
  • Fes una còpia de seguretat del repo original (per si executes el comandament equivocat)

git clone --no-local <ruta-al-teu-repo> <ruta-nou-repo>
cd <ruta-nou-repo>

2. Filtra el subdirectori al nou repo

Secció titulada 2. Filtra el subdirectori al nou repo

Executa això al nou repo:

git filter-repo --subdirectory-filter backend

Això reescriu el repo perquè només quedin l’historial i els fitxers de backend/, i els mou a l’arrel.

NOTA

git filter-repo eliminarà el remote ‘origin’, així que podràs afegir el nou després.

3. Crea un nou repo a GitHub (o on vulguis)

Secció titulada 3. Crea un nou repo a GitHub (o on vulguis)

Crea un repo buit per a la teva API.

git remote add origin <NOVA_URL_REPO>
git push -u origin master

5. Mou o copia fitxers arrel i .env

Secció titulada 5. Mou o copia fitxers arrel i .env

Copia els fitxers i variables d’entorn que necessitis des de l’arrel del monorepo original (com .env, docker-compose.yml, etc.). Actualitza la documentació perquè ningú es perdi.


El repo original es queda igual. Si només vols mantenir l’historial i treure el backend, esborra els fitxers relacionats (backend/, docker-compose.yml, etc.) i fes commit com sempre.

Si vols esborrar tot rastre del backend de l’historial (per open source o temes legals), executa:

git filter-repo --path backend --invert-paths

Això reescriu l’historial i pot trencar els clones locals del teu equip, així que avisa abans de fer-ho.


  • Fes sempre una còpia de seguretat o clona en net abans de reescriure l’historial
  • Avisa l’equip abans de fer un push forçat
  • Dona un cop d’ull a la docu de git filter-repo per a més trucs

Dividir un repo és una bona manera de mantenir els projectes nets i manejables. Amb git filter-repo, conserves l’historial i la tranquil·litat. 🧑‍💻

Isaac RF
Escrit per

Isaac RF

Software · Games · AI