How do I exclude files from git ls-files?

git ls-files exclude directory
git ls-files example
git list files in remote repository
git list files in branch
git list tracked files
git list modified files
git list untracked files
git list files in commit

How do I list everything except markdown files? I have tried, as show in the code below, to run ls-files with the --exclude flag, but the excluded files are still shown in the output.

My git version is 2.6.4 (Apple Git-63)

$ git ls-files
ChromeExt/read-coffee
Node/README.md
Node/web-scraping
README.md

$ git ls-files --exclude *.md
ChromeExt/read-coffee
Node/README.md
Node/web-scraping
README.md

Git has its own way to extend glob patterns, and that includes a way to exclude files that match one pattern but not another. For example, the following will list all paths not ending in .md:

git ls-files -- . ':!:*.md'

It's important to quote the pattern, because you want git to parse it, not the shell.

And to match all files ending with .js, except the ones ending with .min.js:

git ls-files -- '*.js' ':!:*.min.js'

You can also use this with other commands, such as git grep:

git grep -w funcname -- '*.js' ':!:*.min.js'

This syntax is explained under pathspec in gitglossary (or git help glossary or man gitglossary)

How do I exclude files from git ls-files?, Git has its own way to extend glob patterns, and that includes a way to exclude files that match one pattern but not another. For example, the  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.

That was already discussed in 2010:

There is no indication in the man page that -x doesn't apply to -c.

Hence the addition:

Since b5227d8, -x/--exclude does not apply to cached files. This is easy to miss unless you read the discussion in the EXCLUDE PATTERNS section. Clarify that the option applies to untracked files and direct the reader to EXCLUDE PATTERNS.

The git ls-files man page does mentions:

-x <pattern>
--exclude=<pattern>

Skip untracked files matching pattern

If your Readme.md is tracked, the exclude pattern won't apply.

git-ls-files - Show information about files in the , You are shown the cached paths (default). > kore:~/Repos/git (master)$ git ls-files -i -x \* | wc -l > 2009. You told that '*' is the exclude pattern,  Situation Using gedit 3.18.3 with Ubuntu 16.04 LTS. My .git/info/exclude file is # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with

You do not need to use the --exclude parameter because this key is only used for skipping untracked files:

$ man git-ls-files

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

You should just use a mask for required files

In your case (excluding *.md files):

$ git ls-files
example1.txt
example2.pdf
readme.md

$ git ls-files *[^.md]
example1.txt
example2.pdf

.gitignore file, First add the files in question to the file at .git/info/exclude . This file is formatted just like .gitignore . Example: # git ls-files --others  show 3 more comments. 62. Update: For git >= 1.9 there is native support for exclude patterns, see onlyone's answer. This may seem backwards, but you can pass a list of files not matching your exclude pattern to git grep like this: git grep <pattern> -- `git ls-files | grep -v <exclude-pattern>`.

Git - List all files currently under source control?, --exclude-standard Add the standard git exclusions: .git/info/exclude, .gitignore in each directory, and the user's global exclusion file. source manpages: git  You do not need to use the --exclude parameter because this key is only used for skipping untracked files: $ man git-ls-files -x <pattern>, --exclude=<pattern> Skip untracked files matching pattern. Note that pattern is a shell wildcard pattern. See EXCLUDE PATTERNS below for more information. You should just use a mask for required files

How to exclude files from Git only on your computer, Learn how to prevent accidental file check-ins in Git without the limitations of git ls-files --others --exclude-from=.gitignore $ git ls-files --others  Displaying All Ignored Files # The git status command with the --ignored option displays a list of all ignored files: git status --ignored Conclusion # The .gitignore file allows you to exclude files from being checked into the repository. The file contains globbing patterns that describe which files and directories should be ignored.

ls-files --exclude broken?, List untracked files howto. git ls-files . --exclude-standard --others # | +-- untracked # +-- exclude files decalred in .gitignore, etc. This is the same approach one would take using the command line tool find.. find foo \( -name .git -o -name .svn -o -name .cvs \) -prune -o -print

Comments
  • To ignore two file types, the following works: git ls-files -- . ':!:*.md' . ':!:*.css', though it may not be the shortest way to do it.
  • Partof your answer does duplicate mine, but I like the mask solution. It does work on Windows if you add double-quotes. +1 to you for the mask part.
  • On Mac it is working in both cases with and without quotes. So with double-quotes will be better. And yes sorry for dublicate, I didn't refresh page before posting
  • Where can one find documentation on this mask feature?
  • *[^.md] matches files that don't end in ., m, and d. So readme.md is excluded because it ends with d, not because it ends with .md.
  • @geirha you are totally right, that was my mistake at regexp, which in that corner case worked fine and I will kepp that at my answer as example for my point. I hope people will see your comment with explanation.