Skip to content

Git Submodules et Gros Dépôts

Quand les Utiliser

CasSubmoduleAlternative
Dépendance version figéePaquet registry
Co-développement intensifMonorepo
Repo externe tiersVendor périodique
Gros mono-repo lentParfoisSparse checkout

Ajouter

bash
git submodule add https://github.com/org/lib.git libs/lib

Initialiser / Mettre à Jour

bash
git submodule update --init --recursive

Statut

bash
git submodule status

Changer Version

bash
cd libs/lib
git fetch
git checkout <tag|commit>
cd ../../
git add libs/lib
git commit -m "chore: bump lib v1.4.2"

Mettre à Jour Tous (branche suivie)

bash
git submodule update --remote --merge

.gitmodules

[submodule "libs/lib"]
	path = libs/lib
	url = https://github.com/org/lib.git
	branch = main

Bonnes Pratiques

PratiqueBénéfice
Limiter nombreMoins complexité
Commits figésReproductible
Script syncOnboarding rapide
Doc mise à jourClarté

Problèmes Courants

SymptômeSolution
Dossier videupdate --init
Modifs ignoréesCommit dans submodule + parent
Mauvaise brancheAjuster .gitmodules + sync

Retirer Submodule

bash
git submodule deinit -f libs/lib
rm -rf .git/modules/libs/lib
rm -rf libs/lib
git rm -f libs/lib

Alternatives Modernes

ObjectifOption
Partage interneMonorepo (workspaces)
Lib externeRegistry (npm, Maven)
TaillePartial clone / sparse

Sparse Checkout

bash
git sparse-checkout init --cone
git sparse-checkout set src/core src/api

Clone Partiel

bash
git clone --filter=blob:none --sparse https://github.com/org/big.git

LFS (Fichiers lourds)

bash
git lfs install
git lfs track "*.psd"

Résumé

Submodules = dépendances épinglées. Pour collaboration rapprochée, préférer monorepo ou packaging. Optimiser gros dépôts avec sparse / partial clone / LFS.