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] [-f]
		[-c|--cached] [-d|--deleted] [-o|--others] [-i|--ignored]
		[-s|--stage] [-u|--unmerged] [-k|--killed] [-m|--modified]
		[--resolve-undo]
		[--directory [--no-empty-directory]] [--eol]
		[--deduplicate]
		[-x <pattern>|--exclude=<pattern>]
		[-X <file>|--exclude-from=<file>]
		[--exclude-per-directory=<file>]
		[--exclude-standard]
		[--error-unmatch] [--with-tree=<tree-ish>]
		[--full-name] [--recurse-submodules]
		[--abbrev[=<n>]] [--format=<format>] [--] [<file>...]

DESCRIPTION
-----------
This command merges the file listing in the index with the actual working
directory list, and shows different combinations of the two.

Several flags can be used to determine which files are
shown, and each file may be printed multiple times if there are
multiple entries in the index or if multiple statuses are applicable for
the relevant file selection options.

OPTIONS
-------
-c::
--cached::
	Show all files cached in Git's index, i.e. all tracked files.
	(This is the default if no -c/-s/-d/-o/-u/-k/-m/--resolve-undo
	options are specified.)

-d::
--deleted::
	Show files with an unstaged deletion

-m::
--modified::
	Show files with an unstaged modification (note that an unstaged
	deletion also counts as an unstaged modification)

-o::
--others::
	Show other (i.e. untracked) files in the output

-i::
--ignored::
	Show only ignored files in the output.  Must be used with
	either an explicit '-c' or '-o'.  When showing files in the
	index (i.e. when used with '-c'), print only those files
	matching an exclude pattern.  When showing "other" files
	(i.e. when used with '-o'), show only those matched by an
	exclude pattern.  Standard ignore rules are not automatically
	activated; therefore, at least one of the `--exclude*` options
	is required.

-s::
--stage::
	Show staged contents' mode bits, object name and stage number 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.
	Has no effect without -o/--others.

--no-empty-directory::
	Do not list empty directories. Has no effect without --directory.

-u::
--unmerged::
	Show information about unmerged files in the output, but do
	not show any other tracked files (forces --stage, overrides
	--cached).

-k::
--killed::
	Show untracked files on the filesystem that need to be removed
	due to file/directory conflicts for tracked files to be able to
	be written to the filesystem.

--resolve-undo::
	Show files having resolve-undo information in the index
	together with their resolve-undo information.  (resolve-undo
	information is what is used to implement "git checkout -m
	$PATH", i.e. to recreate merge conflicts that were
	accidentally resolved)

-z::
	\0 line termination on output and do not quote filenames.
	See OUTPUT below for more information.

--deduplicate::
	When only filenames are shown, suppress duplicates that may
	come from having multiple stages during a merge, or giving
	`--deleted` and `--modified` option at the same time.
	When any of the `-t`, `--unmerged`, or `--stage` option is
	in use, this option has no effect.

-x <pattern>::
--exclude=<pattern>::
	Skip untracked files matching pattern.
	Note that pattern is a shell wildcard pattern. See EXCLUDE PATTERNS
	below for more information.

-X <file>::
--exclude-from=<file>::
	Read exclude patterns from <file>; 1 per line.

--exclude-per-directory=<file>::
	Read additional exclude patterns that apply only to the
	directory and its subdirectories in <file>.  If you are
	trying to emulate the way Porcelain commands work, using
	the `--exclude-standard` option instead is easier and more
	thorough.

--exclude-standard::
	Add the standard Git exclusions: .git/info/exclude, .gitignore
	in each directory, and the user's global exclusion 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::
	Show status tags together with filenames.  Note that for
	scripting purposes, linkgit:git-status[1] `--porcelain` and
	linkgit:git-diff-files[1] `--name-status` are almost always
	superior alternatives; users should look at
	linkgit:git-status[1] `--short` or linkgit:git-diff[1]
	`--name-status` for more user-friendly alternatives.
+
--
This option provides a reason for showing each filename, in the form
of a status tag (which is followed by a space and then the filename).
The status tags are all single characters from the following list:

	H::	tracked file that is not either unmerged or skip-worktree
	S::	tracked file that is skip-worktree
	M::	tracked file that is unmerged
	R::	tracked file with unstaged removal/deletion
	C::	tracked file with unstaged modification/change
	K::	untracked paths which are part of file/directory conflicts
		which prevent checking out tracked files
	?::	untracked file
	U::     file with resolve-undo information
--

-v::
	Similar to `-t`, but use lowercase letters for files
	that are marked as 'assume unchanged' (see
	linkgit:git-update-index[1]).

-f::
	Similar to `-t`, but use lowercase letters for files
	that are marked as 'fsmonitor valid' (see
	linkgit:git-update-index[1]).

--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.

--recurse-submodules::
	Recursively calls ls-files on each active submodule in the repository.
	Currently there is only support for the --cached and --stage modes.

--abbrev[=<n>]::
	Instead of showing the full 40-byte hexadecimal object
	lines, show the shortest prefix that is at least '<n>'
	hexdigits long that uniquely refers the object.
	Non default number of digits can be specified with --abbrev=<n>.

--debug::
	After each line that describes a file, add more data about its
	cache entry.  This is intended to show as much information as
	possible for manual inspection; the exact format may change at
	any time.

--eol::
	Show <eolinfo> and <eolattr> of files.
	<eolinfo> is the file content identification used by Git when
	the "text" attribute is "auto" (or not set and core.autocrlf is not false).
	<eolinfo> is either "-text", "none", "lf", "crlf", "mixed" or "".
+
"" means the file is not a regular file, it is not in the index or
not accessible in the working tree.
+
<eolattr> is the attribute that is used when checking out or committing,
it is either "", "-text", "text", "text=auto", "text eol=lf", "text eol=crlf".
Since Git 2.10 "text=auto eol=lf" and "text=auto eol=crlf" are supported.
+
Both the <eolinfo> in the index ("i/<eolinfo>")
and in the working tree ("w/<eolinfo>") are shown for regular files,
followed by the  ("attr/<eolattr>").

--sparse::
	If the index is sparse, show the sparse directories without expanding
	to the contained files. Sparse directories will be shown with a
	trailing slash, such as "x/" for a sparse directory "x".

--format=<format>::
	A string that interpolates `%(fieldname)` from the result being shown.
	It also interpolates `%%` to `%`, and `%xXX` where `XX` are hex digits
	interpolates to character with hex code `XX`; for example `%x00`
	interpolates to `\0` (NUL), `%x09` to `\t` (TAB) and %x0a to `\n` (LF).
	--format cannot be combined with `-s`, `-o`, `-k`, `-t`, `--resolve-undo`
	and `--eol`.
\--::
	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
------
'git ls-files' just outputs the filenames unless `--stage` is specified in
which case it outputs:

        [<tag> ]<mode> <object> <stage> <file>

'git ls-files --eol' will show
	i/<eolinfo><SPACES>w/<eolinfo><SPACES>attr/<eolattr><SPACE*><TAB><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/SHA-1 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 linkgit:git-read-tree[1] for more information on state)

Without the `-z` option, pathnames with "unusual" characters are
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]).  Using `-z` the filename is output
verbatim and the line is terminated by a NUL byte.

It is possible to print in a custom format by using the `--format`
option, which is able to interpolate different fields using
a `%(fieldname)` notation. For example, if you only care about the
"objectname" and "path" fields, you can execute with a specific
"--format" like

	git ls-files --format='%(objectname) %(path)'

FIELD NAMES
-----------
The way each path is shown can be customized by using the
`--format=<format>` option, where the %(fieldname) in the
<format> string for various aspects of the index entry are
interpolated.  The following "fieldname" are understood:

objectmode::
	The mode of the file which is recorded in the index.
objecttype::
	The object type of the file which is recorded in the index.
objectname::
	The name of the file which is recorded in the index.
objectsize[:padded]::
	The object size of the file which is recorded in the index
	("-" if the object is a `commit` or `tree`).
	It also supports a padded format of size with "%(objectsize:padded)".
stage::
	The stage of the file which is recorded in the index.
eolinfo:index::
eolinfo:worktree::
	The <eolinfo> (see the description of the `--eol` option) of
	the contents in the index or in the worktree for the path.
eolattr::
	The <eolattr> (see the description of the `--eol` option)
	that applies to the path.
path::
	The pathname of the file which is recorded in the index.

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

These exclude patterns can be specified from the following 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. The 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.

Generally, you should be able to use `--exclude-standard` when you
want the exclude rules applied the same way as what Porcelain
commands do.  To emulate what `--exclude-standard` specifies, you
can give `--exclude-per-directory=.gitignore`, and then specify:

  1. The file specified by the `core.excludesfile` configuration
     variable, if exists, or the `$XDG_CONFIG_HOME/git/ignore` file.

  2. The `$GIT_DIR/info/exclude` file.

via the `--exclude-from=` option.

SEE ALSO
--------
linkgit:git-read-tree[1], linkgit:gitignore[5]

GIT
---
Part of the linkgit:git[1] suite
