I've always found submodules fragile and unergonomic, especially when switching branches or adding and removing them often. git-subrepo's model, where vendored code is just plain files plus a .gitrepo marker, fixed that for me, but I didn't like its ergonomics, conflict resolution and error handling.
git include is a git plugin built on that model. It's a single binary that reads and writes the same .gitrepo format (so existing subrepo directories work as-is). But it never creates temporary branches or worktrees, and it also handles conflict resolution just like a plain git repo.
To contribute changes back upstream, it rebuilds a history from the parent repo commits that touched the vendored directory. It also supports vendoring specific tags or commits, Git LFS, nested includes, and migrating existing submodules.
Only people who add, update or upstream changes to the vendored repos need the plugin. Everyone else uses git normally.
I used Claude during development but made the design decisions myself, and it solves a problem that's bugged me for a while. Feedback and issues welcome.
flova•45m ago