Elijah Newren <newren@xxxxxxxxx> writes: > Ah, okay, that's helpful. So, if there are conflicts, it should be > free to clear the skip_worktree flag. Since merge-recursive calls > add_cacheinfo() for all entries it needs to update, which deletes the > old cache entry and just makes new ones, we get that for free. Correct. > And conversely, if a file-level merge succeeds without conflicts then > it clearly doesn't "need to materialize a working tree file", so it > should NOT clear the skip_worktree flag for that path. That is not at all implied by what I wrote, though. If it can be done without too much effort, then it certainly is nicer to keep the sparseness when we do not have to materialize the working tree file. But at least in my mind, if it needs too many special cases, hacks, and conditionals, then it is not worth the complexity---if it is easier to write a correct code by allowing Git to populate working tree files, it is perfectly fine to do so. In a sense, the sparse checkout "feature" itself is a hack by itself, and that is why I think this part should be "best effort" as well.