checkout-index: add --ignore-skip-worktree-bits option
commit88078f543b769dc13ae9796372651178584a25a0
authorVictoria Dye <vdye@github.com>
Tue, 11 Jan 2022 18:05:02 +0000 (11 18:05 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Jan 2022 21:49:45 +0000 (13 13:49 -0800)
tree6a2cfae873434b47fb22f03a81c24265bdd57dc9
parentb553ef674965f41bfff4e0a2c330f9087b3cd6b7
checkout-index: add --ignore-skip-worktree-bits option

Update `checkout-index` to no longer refresh files that have the
`skip-worktree` bit set, exiting with an error if `skip-worktree` filenames
are directly provided to `checkout-index`. The newly-added
`--ignore-skip-worktree-bits` option provides a mechanism to replicate the
old behavior, checking out *all* files specified (even those with
`skip-worktree` enabled).

The ability to toggle whether files should be checked-out based on
`skip-worktree` already exists in `git checkout` and `git restore` (both of
which have an `--ignore-skip-worktree-bits` option). The change to, by
default, ignore `skip-worktree` files is especially helpful for
sparse-checkout; it prevents inadvertent creation of files outside the
sparse definition on disk and eliminates the need to expand a sparse index
when using the `--all` option.

Internal usage of `checkout-index` in `git stash` and `git filter-branch` do
not make explicit use of files with `skip-worktree` enabled, so
`--ignore-skip-worktree-bits` is not added to them.

Helped-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Victoria Dye <vdye@github.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-checkout-index.txt
builtin/checkout-index.c
t/t1092-sparse-checkout-compatibility.sh