diff --git a/Documentation/config/clean.txt b/Documentation/config/clean.txt index b19ca210f39b57..c0188ead4e6cd8 100644 --- a/Documentation/config/clean.txt +++ b/Documentation/config/clean.txt @@ -1,3 +1,3 @@ clean.requireForce:: A boolean to make git-clean refuse to delete files unless -f - or -i is given. Defaults to true. + is given. Defaults to true. diff --git a/Documentation/git-clean.txt b/Documentation/git-clean.txt index 662eebb852076a..fd171654163c1f 100644 --- a/Documentation/git-clean.txt +++ b/Documentation/git-clean.txt @@ -37,7 +37,7 @@ OPTIONS --force:: If the Git configuration variable clean.requireForce is not set to false, 'git clean' will refuse to delete files or directories - unless given -f or -i. Git will refuse to modify untracked + unless given -f. Git will refuse to modify untracked nested git repositories (directories with a .git subdirectory) unless a second -f is given. @@ -45,11 +45,13 @@ OPTIONS --interactive:: Show what would be done and clean files interactively. See ``Interactive mode'' for details. + Configuration variable `clean.requireForce` is ignored, as + this mode gives its own safety protection by going interactive. -n:: --dry-run:: Don't actually remove anything, just show what would be done. - Configuration variable clean.requireForce is ignored, as + Configuration variable `clean.requireForce` is ignored, as nothing will be deleted anyway. -q:: diff --git a/builtin/clean.c b/builtin/clean.c index 41502dcb0ddeed..29efe841537b34 100644 --- a/builtin/clean.c +++ b/builtin/clean.c @@ -950,13 +950,8 @@ int cmd_clean(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, options, builtin_clean_usage, 0); - /* Dry run won't remove anything, so requiring force makes no sense */ - if (dry_run) - require_force = 0; - - if (require_force != 0 && !force && !interactive) - die(_("clean.requireForce is true and neither -f nor -i given:" - " refusing to clean")); + if (require_force != 0 && !force && !interactive && !dry_run) + die(_("clean.requireForce is true and -f not given: refusing to clean")); if (force > 1) rm_flags = 0; diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh index 611b3dd3aedb44..1f7201eb60caf9 100755 --- a/t/t7300-clean.sh +++ b/t/t7300-clean.sh @@ -407,6 +407,12 @@ test_expect_success 'clean.requireForce and -f' ' ' +test_expect_success 'clean.requireForce and --interactive' ' + git clean --interactive output 2>error && + test_grep ! "requireForce is true and" error && + test_grep "\*\*\* Commands \*\*\*" output +' + test_expect_success 'core.excludesfile' ' echo excludes >excludes &&