Skip to content

Commit b619467

Browse files
committed
Documentation: clarify "git clean -e <pattern>"
The current explanation of -e can be misread as allowing the user to say I know 'git clean -XYZ' (substitute -XYZ with any option and/or parameter) will remove paths A, B, and C, and I want them all removed except for paths matching this pattern by adding '-e C' to the same command line, i.e. 'git clean -e C -XYZ'. But that is not what this option does. It augments the set of ignore rules from the command line, just like the same "-e <pattern>" argument does with the "ls-files" command (the user could probably pass "-e \!C" to tell the command to clean everything the command would normally remove, except for C). Also error out when both -x and -e are given with an explanation of what -e means---it is a symptom of misunderstanding what -e does. It also fixes small style nit in the parameter to add_exclude() call. The current code only works because EXC_CMDL happens to be defined as 0. Signed-off-by: Junio C Hamano <[email protected]>
1 parent ccef604 commit b619467

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

Documentation/git-clean.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,14 @@ OPTIONS
4747

4848
-e <pattern>::
4949
--exclude=<pattern>::
50-
Specify special exceptions to not be cleaned. Each <pattern> is
51-
the same form as in $GIT_DIR/info/excludes and this option can be
52-
given multiple times.
50+
In addition to those found in .gitignore (per directory) and
51+
$GIT_DIR/info/exclude, also consider these patterns to be in the
52+
set of the ignore rules in effect.
5353

5454
-x::
55-
Don't use the ignore rules. This allows removing all untracked
55+
Don't use the standard ignore rules read from .gitignore (per
56+
directory) and $GIT_DIR/info/exclude, but do still use the ignore
57+
rules given with `-e` options. This allows removing all untracked
5658
files, including build products. This can be used (possibly in
5759
conjunction with 'git reset') to create a pristine
5860
working directory to test a clean build.

builtin/clean.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
5454
OPT_BOOLEAN('d', NULL, &remove_directories,
5555
"remove whole directories"),
5656
{ OPTION_CALLBACK, 'e', "exclude", &exclude_list, "pattern",
57-
"exclude <pattern>", PARSE_OPT_NONEG, exclude_cb },
57+
"add <pattern> to ignore rules", PARSE_OPT_NONEG, exclude_cb },
5858
OPT_BOOLEAN('x', NULL, &ignored, "remove ignored files, too"),
5959
OPT_BOOLEAN('X', NULL, &ignored_only,
6060
"remove only ignored files"),
@@ -98,7 +98,8 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
9898
setup_standard_excludes(&dir);
9999

100100
for (i = 0; i < exclude_list.nr; i++)
101-
add_exclude(exclude_list.items[i].string, "", 0, dir.exclude_list);
101+
add_exclude(exclude_list.items[i].string, "", 0,
102+
&dir.exclude_list[EXC_CMDL]);
102103

103104
pathspec = get_pathspec(prefix, argv);
104105

0 commit comments

Comments
 (0)