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.

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. 🛠️
Per què dividir un repo?
Secció titulada Per què dividir un repo?- 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 carpetesSuposa 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.
Requisits previs
Secció titulada Requisits previs- git filter-repo (
pip install git-filter-repo) - Fes una còpia de seguretat del repo original (per si executes el comandament equivocat)
Guia pas a pas
Secció titulada Guia pas a pas1. Clona el teu repo (net)
Secció titulada 1. Clona el teu repo (net)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 repoExecuta això al nou repo:
git filter-repo --subdirectory-filter backendAixò reescriu el repo perquè només quedin l’historial i els fitxers de backend/, i els mou a l’arrel.
NOTA
git filter-repoeliminarà 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.
4. Afegeix el remot i fes push
Secció titulada 4. Afegeix el remot i fes pushgit remote add origin <NOVA_URL_REPO>
git push -u origin master5. Mou o copia fitxers arrel i .env
Secció titulada 5. Mou o copia fitxers arrel i .envCopia 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.
Què passa amb el repo original?
Secció titulada Què passa amb el repo original?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-pathsAixò reescriu l’historial i pot trencar els clones locals del teu equip, així que avisa abans de fer-ho.
Consells
Secció titulada Consells- 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
Referències
Secció titulada ReferènciesDividir un repo és una bona manera de mantenir els projectes nets i manejables. Amb git filter-repo, conserves l’historial i la tranquil·litat. 🧑💻

