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

Das Subtree-Modell

Ein Subtree fugt die Historie eines anderen Repositorys in ein Unterverzeichnis Ihres ein. Anders als Submodule gibt es keinen separaten Gitlink und keine zusatzlichen Befehle beim Klonen.

Subtree hinzufugen

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

Updates ziehen

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

Push zuruck zu upstream

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

Subtree vs Submodul

Subtrees fur reibungsloses Klonen, wenn Sie selten den vendored Code andern. Submodule, wenn Sie auf einen genauen upstream-SHA pinnen mussen.

Unterverzeichnis aufteilen

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

Haufige Fehler

--squash vergessen importiert zehntausende upstream-Commits.

Alternative Subtree-Merge-Strategie

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"