Von Gast (nicht überprüft) , 29 April 2026

Was Sie erreichen werden

Sie werden mehrere bestehende Git-Repositories in einem einzigen Monorepo kombinieren und die Historie jedes Repos unter seinem eigenen Unterverzeichnis bewahren.

Voraussetzungen

  • Aktuelles Git (2.30+).
  • git filter-repo installiert.
  • Die Quell-Repositories.

Schritt 1: jede Quelle vorbereiten

mkdir monorepo-staging && cd monorepo-staging

# Repo 1: web app
git clone --no-local /path/to/web-source web-prep
cd web-prep
git filter-repo --to-subdirectory-filter packages/web
cd ..

# Repo 2: shared UI library
git clone --no-local /path/to/ui-source ui-prep
cd ui-prep
git filter-repo --to-subdirectory-filter packages/ui
cd ..

# Repo 3: CLI tool
git clone --no-local /path/to/cli-source cli-prep
cd cli-prep
git filter-repo --to-subdirectory-filter packages/cli
cd ..

Schritt 2: das Monorepo erstellen

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

Schritt 3: jede Quelle importieren

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

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

Schritt 4: Historie verifizieren

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

Schritt 5: Monorepo-Tooling

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

Schritt 6: Affected-only CI

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

Schritt 7: Sparse Checkout

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

Schritt 8: Quell-Repos archivieren

Quell-Repos read-only machen.

Schritt 9: kommunizieren

Das Team trainieren: neue Klon-URL, Build-Befehle, wie ein neues Paket hinzugefugt wird.

Schritt 10: Cross-Package-Refactors

Der Payoff: eine Funktion in packages/ui umbenennen und ihre Aufrufer in packages/web in einem einzelnen Commit aktualisieren.

Fallstricke

  • Repository-Grosse wachst.
  • CI ist langsam ohne affected-only Filterung.
  • Berechtigungs-Granularitat ist schwieriger.