Submodule-modes: Distinguish between update modes and update targets
[git-submod-enhancements.wiki.git] / Recursive-submodule-checkout.textile
1 This effort is about teaching @am@, @apply@, @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).
2
3 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.
4
5 **Be warned: the code is still experimental and might damage your data!**
6 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)
7
8 Having said that, I already use this code for quite some time at my dayjob and it's working fine for me.
9
10 *Stuff that's currently known not to work:*
11
12 * Interactive rebase doesn't update submodule work trees
13 * A recreated submodule won't appear on first checkout (but it will on the second checkout; a fix for that is being worked on)
14 * A non-interactive rebase empties changed submodules
15
16 Please mail me if you find another problem so we can take care of it (patches are also welcome ;-).
17
18 *How to test it*
19
20 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).