diff options
-rw-r--r-- | Documentation/git-ls-files.txt | 27 | ||||
-rwxr-xr-x | t/t3001-ls-files-others-exclude.sh | 23 |
2 files changed, 32 insertions, 18 deletions
diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 7ac6c7d84a..d207219405 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -115,14 +115,14 @@ An exclude pattern file used by (2) and (3) contains one pattern per line. A line that starts with a '#' can be used as comment for readability. -The list of patterns that is in effect at a given time is -built and ordered in the following way: +There are three lists of patterns that are in effect at a given +time. They are built and ordered in the following way: - * --exclude=<pattern> and lines read from --exclude-from=<file> - come at the beginning of the list of patterns, in the order - given on the command line. Patterns that come from the file - specified with --exclude-from are ordered in the same order - as they appear in the file. + * --exclude=<pattern> from the command line; patterns are + ordered in the same order as they appear on the command line. + + * lines read from --exclude-from=<file>; patterns are ordered + in the same order as they appear in the file. * When --exclude-per-directory=<name> is specified, upon entering a directory that has such a file, its contents are @@ -130,11 +130,12 @@ built and ordered in the following way: are popped off when leaving the directory. Each pattern in the pattern list specifies "a match pattern" and -optionally the fate --- either a file that matches the pattern -is considered excluded or included. By default, this being -"exclude" mechanism, the fate is "excluded". A filename is -examined against the patterns in the list, and the first match -determines its fate. +optionally the fate;n either a file that matches the pattern is +considered excluded or included. A filename is matched against +the patterns in the three lists; the --exclude-from list is +checked first, then the --exclude-per-directory list, and then +finally the --exclude list. The last match determines its fate. +If there is no match in the three lists, the fate is "included". A pattern specified on the command line with --exclude or read from the file specified with --exclude-from is relative to the @@ -168,9 +169,9 @@ An example: *.[oa] $ cat Documentation/.gitignore # ignore generated html files, + *.html # except foo.html which is maintained by hand !foo.html - *.html $ git-ls-files --ignored \ --exclude='Documentation/*.[0-9]' \ --exclude-from=.git/ignore \ diff --git a/t/t3001-ls-files-others-exclude.sh b/t/t3001-ls-files-others-exclude.sh index 4b9380fa09..dbff346c0a 100755 --- a/t/t3001-ls-files-others-exclude.sh +++ b/t/t3001-ls-files-others-exclude.sh @@ -14,7 +14,7 @@ rm -fr one three for dir in . one one/two three do mkdir -p $dir && - for i in 1 2 3 4 5 + for i in 1 2 3 4 5 6 7 8 do >$dir/a.$i done @@ -24,31 +24,44 @@ cat >expect <<EOF a.2 a.4 a.5 +a.8 one/a.3 one/a.4 one/a.5 +one/a.7 +one/two/a.2 one/two/a.3 one/two/a.5 +one/two/a.7 +one/two/a.8 three/a.2 three/a.3 three/a.4 three/a.5 +three/a.8 EOF echo '.gitignore output expect .gitignore -' >.git/ignore +*.7 +!*.8' >.git/ignore echo '*.1 -/*.3' >.gitignore +/*.3 +!*.6' >.gitignore echo '*.2 -two/*.4' >one/.gitignore +two/*.4 +!*.7 +*.8' >one/.gitignore +echo '!*.2 +!*.8' >one/two/.gitignore test_expect_success \ - 'git-ls-files --others --exclude.' \ + 'git-ls-files --others with various exclude options.' \ 'git-ls-files --others \ + --exclude=\*.6 \ --exclude-per-directory=.gitignore \ --exclude-from=.git/ignore \ >output && |