| git-ls-files(1) |
| =============== |
| |
| NAME |
| ---- |
| git-ls-files - Information about files in the index/working directory |
| |
| |
| SYNOPSIS |
| -------- |
| [verse] |
| 'git-ls-files' [-z] [-t] [-v] |
| (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])\* |
| (-[c|d|o|i|s|u|k|m])\* |
| [-x <pattern>|--exclude=<pattern>] |
| [-X <file>|--exclude-from=<file>] |
| [--exclude-per-directory=<file>] |
| [--error-unmatch] |
| [--full-name] [--abbrev] [--] [<file>]\* |
| |
| DESCRIPTION |
| ----------- |
| This merges the file listing in the directory cache index with the |
| actual working directory list, and shows different combinations of the |
| two. |
| |
| One or more of the options below may be used to determine the files |
| shown: |
| |
| OPTIONS |
| ------- |
| -c|--cached:: |
| Show cached files in the output (default) |
| |
| -d|--deleted:: |
| Show deleted files in the output |
| |
| -m|--modified:: |
| Show modified files in the output |
| |
| -o|--others:: |
| Show other files in the output |
| |
| -i|--ignored:: |
| Show ignored files in the output |
| Note the this also reverses any exclude list present. |
| |
| -s|--stage:: |
| Show stage files in the output |
| |
| --directory:: |
| If a whole directory is classified as "other", show just its |
| name (with a trailing slash) and not its whole contents. |
| |
| --no-empty-directory:: |
| Do not list empty directories. Has no effect without --directory. |
| |
| -u|--unmerged:: |
| Show unmerged files in the output (forces --stage) |
| |
| -k|--killed:: |
| Show files on the filesystem that need to be removed due |
| to file/directory conflicts for checkout-index to |
| succeed. |
| |
| -z:: |
| \0 line termination on output. |
| |
| -x|--exclude=<pattern>:: |
| Skips files matching pattern. |
| Note that pattern is a shell wildcard pattern. |
| |
| -X|--exclude-from=<file>:: |
| exclude patterns are read from <file>; 1 per line. |
| |
| --exclude-per-directory=<file>:: |
| read additional exclude patterns that apply only to the |
| directory and its subdirectories in <file>. |
| |
| --error-unmatch:: |
| If any <file> does not appear in the index, treat this as an |
| error (return 1). |
| |
| -t:: |
| Identify the file status with the following tags (followed by |
| a space) at the start of each line: |
| H:: cached |
| M:: unmerged |
| R:: removed/deleted |
| C:: modified/changed |
| K:: to be killed |
| ?:: other |
| |
| -v:: |
| Similar to `-t`, but use lowercase letters for files |
| that are marked as 'always matching index'. |
| |
| --full-name:: |
| When run from a subdirectory, the command usually |
| outputs paths relative to the current directory. This |
| option forces paths to be output relative to the project |
| top directory. |
| |
| --abbrev[=<n>]:: |
| Instead of showing the full 40-byte hexadecimal object |
| lines, show only handful hexdigits prefix. |
| Non default number of digits can be specified with --abbrev=<n>. |
| |
| \--:: |
| Do not interpret any more arguments as options. |
| |
| <file>:: |
| Files to show. If no files are given all files which match the other |
| specified criteria are shown. |
| |
| Output |
| ------ |
| show files just outputs the filename unless '--stage' is specified in |
| which case it outputs: |
| |
| [<tag> ]<mode> <object> <stage> <file> |
| |
| "git-ls-files --unmerged" and "git-ls-files --stage" can be used to examine |
| detailed information on unmerged paths. |
| |
| For an unmerged path, instead of recording a single mode/SHA1 pair, |
| the dircache records up to three such pairs; one from tree O in stage |
| 1, A in stage 2, and B in stage 3. This information can be used by |
| the user (or the porcelain) to see what should eventually be recorded at the |
| path. (see git-read-tree for more information on state) |
| |
| When `-z` option is not used, TAB, LF, and backslash characters |
| in pathnames are represented as `\t`, `\n`, and `\\`, |
| respectively. |
| |
| |
| Exclude Patterns |
| ---------------- |
| |
| 'git-ls-files' can use a list of "exclude patterns" when |
| traversing the directory tree and finding files to show when the |
| flags --others or --ignored are specified. |
| |
| These exclude patterns come from these places: |
| |
| 1. command line flag --exclude=<pattern> specifies a single |
| pattern. |
| |
| 2. command line flag --exclude-from=<file> specifies a list of |
| patterns stored in a file. |
| |
| 3. command line flag --exclude-per-directory=<name> specifies |
| a name of the file in each directory 'git-ls-files' |
| examines, and if exists, its contents are used as an |
| additional list of patterns. |
| |
| 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. |
| |
| 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> 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 |
| appended at the end of the current "list of patterns". They |
| 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. 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 |
| top of the directory tree. A pattern read from a file specified |
| by --exclude-per-directory is relative to the directory that the |
| pattern file appears in. |
| |
| An exclude pattern is of the following format: |
| |
| - an optional prefix '!' which means that the fate this pattern |
| specifies is "include", not the usual "exclude"; the |
| remainder of the pattern string is interpreted according to |
| the following rules. |
| |
| - if it does not contain a slash '/', it is a shell glob |
| pattern and used to match against the filename without |
| leading directories. |
| |
| - otherwise, it is a shell glob pattern, suitable for |
| consumption by fnmatch(3) with FNM_PATHNAME flag. I.e. a |
| slash in the pattern must match a slash in the pathname. |
| "Documentation/\*.html" matches "Documentation/git.html" but |
| not "ppc/ppc.html". As a natural exception, "/*.c" matches |
| "cat-file.c" but not "mozilla-sha1/sha1.c". |
| |
| An example: |
| |
| -------------------------------------------------------------- |
| $ cat .git/ignore |
| # ignore objects and archives, anywhere in the tree. |
| *.[oa] |
| $ cat Documentation/.gitignore |
| # ignore generated html files, |
| *.html |
| # except foo.html which is maintained by hand |
| !foo.html |
| $ git-ls-files --ignored \ |
| --exclude='Documentation/*.[0-9]' \ |
| --exclude-from=.git/ignore \ |
| --exclude-per-directory=.gitignore |
| -------------------------------------------------------------- |
| |
| Another example: |
| |
| -------------------------------------------------------------- |
| $ cat .gitignore |
| vmlinux* |
| $ ls arch/foo/kernel/vm* |
| arch/foo/kernel/vmlinux.lds.S |
| $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore |
| -------------------------------------------------------------- |
| |
| The second .gitignore keeps `arch/foo/kernel/vmlinux.lds.S` file |
| from getting ignored. |
| |
| |
| See Also |
| -------- |
| gitlink:git-read-tree[1] |
| |
| |
| Author |
| ------ |
| Written by Linus Torvalds <torvalds@osdl.org> |
| |
| Documentation |
| -------------- |
| Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>. |
| |
| GIT |
| --- |
| Part of the gitlink:git[7] suite |
| |