Par Anonyme (non vérifié) , 29 avril 2026

Ce que vous accomplirez

Vous combinerez plusieurs dépôts Git existants dans un seul monorepo, en préservant l'historique de chaque repo sous son propre sous-répertoire.

Pourquoi monorepo

Les setups multi-repo rendent les changements cross-cutting difficiles.

Prérequis

  • Git récent (2.30+).
  • git filter-repo installé.
  • Les dépôts source.

Étape 1 : préparer chaque source

mkdir monorepo-staging && cd monorepo-staging

git clone --no-local /path/to/web-source web-prep
cd web-prep
git filter-repo --to-subdirectory-filter packages/web
cd ..

git clone --no-local /path/to/ui-source ui-prep
cd ui-prep
git filter-repo --to-subdirectory-filter packages/ui
cd ..

git clone --no-local /path/to/cli-source cli-prep
cd cli-prep
git filter-repo --to-subdirectory-filter packages/cli
cd ..

Étape 2 : créer le monorepo

git init monorepo
cd monorepo
git commit --allow-empty -m "Initial monorepo commit"

Étape 3 : importer chaque source

git remote add web-source ../web-prep
git fetch web-source
git merge --allow-unrelated-histories web-source/main -m "Import web from web-source"
git remote remove web-source

git remote add ui-source ../ui-prep
git fetch ui-source
git merge --allow-unrelated-histories ui-source/main -m "Import ui from ui-source"
git remote remove ui-source

Étape 4 : vérifier l'historique

git log --oneline
git log --follow packages/web/src/index.js
git blame packages/ui/src/Button.js

Étape 5 : tooling de monorepo

# package.json
{
  "private": true,
  "workspaces": ["packages/*"],
  "scripts": {
    "build": "turbo run build",
    "test": "turbo run test",
    "lint": "turbo run lint"
  }
}

Étape 6 : CI affected-only

turbo run test --filter=...[origin/main]
npx nx affected:test --base=origin/main

Étape 7 : sparse checkout

git clone --filter=blob:none --sparse <url>
cd monorepo
git sparse-checkout init --cone
git sparse-checkout set packages/web

Étape 8 : archiver les repos source

Étape 9 : communiquer

Étape 10 : refactors cross-package

Pièges

  • La taille du dépôt grandit.
  • CI est lent sans filtrage affected-only.
  • La granularité des permissions est plus difficile.
  • Le premier mois après migration est rude.