git-ls-files(1)
===============

NAME
----
git-ls-files - Show information about files in the index and the working tree


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] [--with-tree=<tree-ish>]
		[--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 that 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).

--with-tree=<tree-ish>::
	When using --error-unmatch to expand the user supplied
	<file> (i.e. path pattern) arguments to paths, pretend
	that paths which were removed in the index since the
	named <tree-ish> are still present.  Using this option
	with `-s` or `-u` options does not make any sense.

-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 index 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.  gitlink:gitignore[5]
specifies the format of exclude patterns.

These exclude patterns come from these places, in order:

  1. The command line flag --exclude=<pattern> specifies a
     single pattern.  Patterns are ordered in the same order
     they appear in the command line.

  2. The command line flag --exclude-from=<file> specifies a
     file containing a list of patterns.  Patterns are ordered
     in the same order they appear in the file.

  3. command line flag --exclude-per-directory=<name> specifies
     a name of the file in each directory 'git-ls-files'
     examines, normally `.gitignore`.  Files in deeper
     directories take precedence.  Patterns are ordered in the
     same order they appear in the files.

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.

See Also
--------
gitlink:git-read-tree[1], gitlink:gitignore[5]


Author
------
Written by Linus Torvalds <torvalds@osdl.org>

Documentation
--------------
Documentation by David Greaves, Junio C Hamano, Josh Triplett, and the git-list <git@vger.kernel.org>.

GIT
---
Part of the gitlink:git[7] suite
