Skip to content

Commit

Permalink
checkout: introduce checkout.overlayMode config
Browse files Browse the repository at this point in the history
In the previous patch we introduced a new no-overlay mode for git
checkout.  Some users (such as the author of this commit) may want to
have this mode turned on by default as it matches their mental model
more closely.  Make that possible by introducing a new config option
to that extend.

Signed-off-by: Thomas Gummerer <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
tgummerer authored and gitster committed Jan 8, 2019
1 parent 091e04b commit 1495ff7
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
7 changes: 7 additions & 0 deletions Documentation/config/checkout.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,10 @@ checkout.optimizeNewBranch::
will not update the skip-worktree bit in the index nor add/remove
files in the working directory to reflect the current sparse checkout
settings nor will it show the local changes.

checkout.overlayMode::
In the default overlay mode, `git checkout` never
removes files from the index or the working tree. When
setting `checkout.overlayMode` to false, files that appear in
the index and working tree, but not in <tree-ish> are removed,
to make them match <tree-ish> exactly.
8 changes: 7 additions & 1 deletion builtin/checkout.c
Original file line number Diff line number Diff line change
Expand Up @@ -1019,13 +1019,19 @@ static int switch_branches(const struct checkout_opts *opts,

static int git_checkout_config(const char *var, const char *value, void *cb)
{
struct checkout_opts *opts = cb;

if (!strcmp(var, "checkout.optimizenewbranch")) {
checkout_optimize_new_branch = git_config_bool(var, value);
return 0;
}

if (!strcmp(var, "checkout.overlaymode")) {
opts->overlay_mode = git_config_bool(var, value);
return 0;
}

if (!strcmp(var, "diff.ignoresubmodules")) {
struct checkout_opts *opts = cb;
handle_ignore_submodules_arg(&opts->diff_options, value);
return 0;
}
Expand Down
10 changes: 10 additions & 0 deletions t/t2025-checkout-no-overlay.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,14 @@ test_expect_success '--no-overlay --theirs with D/F conflict deletes file' '
test_path_is_missing file1
'

test_expect_success 'checkout with checkout.overlayMode=false deletes files not in <tree-ish>' '
>file &&
mkdir dir &&
>dir/file1 &&
git add file dir/file1 &&
git -c checkout.overlayMode=false checkout HEAD -- file &&
test_path_is_missing file &&
test_path_is_file dir/file1
'

test_done

0 comments on commit 1495ff7

Please sign in to comment.