3 ms·
The SVN implementation worked pretty seamlessly, almost like a regular subdirectory. There was no gotcha of a non-recursive clone/checkout. If you've used this
by pornel 4y ago
The SVN implementation worked pretty seamlessly, almost like a regular subdirectory.
There was no gotcha of a non-recursive clone/checkout. If you've used this feature, your users wouldn't keep getting "broken" checkouts.
There was no gotcha of state split between .gitmodules, top-level .git state, and submodule's .git, and the issues caused by them being out of sync.
There was no gotcha of referencing an unpushed commit.
Submodules are weirdly special and let all of their primitive implementation details leak out to the interface. You can't just clone the repo any more, you have to clone recursively. You can't just checkout branches any more, you have to init and update the submodules too, with extra complications if the same submodules don't exist in all branches. You can't just commit/push, you have to commit/push the submodules first. With submodules every basic git operation gets extra steps and novel failure modes. Some operations feel outright buggy, e.g. rebase gets confused and fails when an in-tree directory has been changed to a submodule.
Functionality provided by submodules is great, but the implementation feels like it's intentionally trying to make less-than-expert users feel stupid.