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

Le modèle subtree

Un subtree fusionne l'histoire d'un autre dépôt dans un sous-répertoire du vôtre. Contrairement aux submodules, il n'y a pas de gitlink séparé ni de commande supplémentaire requise pour cloner — quiconque clone votre repo obtient automatiquement le contenu du subtree. Le coût est une histoire plus dense ; le bénéfice est la simplicité opérationnelle.

Ajouter un subtree

git subtree add --prefix=third_party/lib \
  https://github.com/example/lib main --squash

Le flag --squash écrase l'histoire importée en un seul commit.

Tirer les mises à jour

git subtree pull --prefix=third_party/lib \
  https://github.com/example/lib main --squash
git remote add lib https://github.com/example/lib
git subtree pull --prefix=third_party/lib lib main --squash

Pousser vers upstream

git subtree push --prefix=third_party/lib lib feature-branch

Subtree vs submodule

Choisissez les subtrees quand vous voulez un clone sans friction pour les nouveaux venus. Choisissez les submodules quand vous devez ancrer à un SHA upstream exact.

Diviser un sous-répertoire

git subtree split --prefix=third_party/lib -b lib-only
cd ..
git clone /path/to/parent --branch lib-only lib-extracted

Erreurs courantes

Oublier --squash importe des dizaines de milliers de commits upstream.

Alternative : stratégie merge subtree

git remote add -f lib https://github.com/example/lib
git merge -s ours --no-commit --allow-unrelated-histories lib/main
git read-tree --prefix=third_party/lib/ -u lib/main
git commit -m "Subtree merge of lib"