On Sun, Sep 12, 2021, Derrick Stolee via GitGitGadget wrote: > This series is based on ds/mergies-with-sparse-index. > > As requested, this series looks to update the behavior of git add, git rm, > and git mv when they attempt to modify paths outside of the sparse-checkout > cone. In particular, this care is expanded to not just cache entries with > the SKIP_WORKTREE bit, but also paths that do not match the sparse-checkout > definition. I suspect something in this series broke 'git add' and friends with "odd" sparse definitions (I haven't actually bisected). git 2.33.0 rejects attempts to add files with the below sparse-checkout and modified files. There appears to be a discrepancy in the query vs. checkout logic as the rejected files are checked out in the working tree, e.g. git sees that the local file was deleted, yet will not stage the deletion. There's also arguably a flaw in the "advise" trigger. AFAICT, the help message is displayed if and only if the entire path is excluded from the working tree. In my perfect world, git would complain and advise if there are unstaged changes for tracked files covered by the specified path. Note, my sparse-checkout is very much the result of trial and error to get the exact files I care about. It's entirely possible I'm doing something weird, but at the same time git itself is obviously confused. Thanks! $ cat .git/info/sparse-checkout !arch/* !tools/arch/* !virt/kvm/arm/* /* arch/.gitignore arch/Kconfig arch/x86 tools/arch/x86 tools/include/uapi/linux/kvm.h !Documentation !drivers $ git read-tree -mu HEAD $ rm arch/x86/kvm/x86.c $ git commit -a On branch x86/kvm_find_cpuid_entry_index Your branch is up to date with 'kvm/queue'. You are in a sparse checkout with 40% of tracked files present. Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) deleted: arch/x86/kvm/x86.c no changes added to commit (use "git add" and/or "git commit -a") $ git add arch $ git add . $ git add arch/x86 The following paths and/or pathspecs matched paths that exist outside of your sparse-checkout definition, so will not be updated in the index: arch/x86 hint: If you intend to update such entries, try one of the following: hint: * Use the --sparse option. hint: * Disable or modify the sparsity rules. hint: Disable this message with "git config advice.updateSparsePath false"