This effort is about teaching @am@, @bisect@, @checkout@, @checkout-index@, @cherry-pick@, @merge@, @pull@, @read-tree@, @rebase@, @reset@ & @stash@ to recursively update submodule work trees according to the commit recorded in the superproject (which gets rid of having to run "git submodule update" every time something changes). You find the current state of this series in the [[recusive_submodule_update|https://github.com/jlehmann/git-submod-enhancements/tree/recursive_submodule_checkout]] branch in this repo. **Be warned: the code is still experimental and might damage your data!** Especially when removing a submodule on checkout all ignored untracked files inside it will be lost! (and it'll stay that way until the discussed ignored-but-precious attribute is implemented in Git) Having said that, I already use this code for quite some time at my dayjob and it's working fine for me. *Stuff that's currently known not to work:* * Interactive rebase doesn't update submodule work trees * A recreated submodule won't appear on first checkout (but it will on the second checkout; a fix for that is being worked on) * A non-interactive rebase empties changed submodules Please mail me if you find another problem so we can take care of it (patches are also welcome ;-). *How to test it* Just check out the [[recusive_submodule_update|https://github.com/jlehmann/git-submod-enhancements/tree/recursive_submodule_checkout]] and put a "return 1" in the first line of submodule_needs_update() in submodule.c in a commit on top of it (this enables unconditional recursive checkout and will be needed until the configuration options are implemented and mature enough; but currently it breaks quite some tests).