131
42
Is there a way to list all files currently under source control in git? (Not just those that have been modified).
131
42
Is there a way to list all files currently under source control in git? (Not just those that have been modified).
135
If you want to list all files for a specific branch, e.g. master
:
git ls-tree -r master --name-only
The -r
option will let it recurse into subdirectories and print each file currently under version control. You can also specify HEAD
instead of master
to get the list for any other branch you might be in.
If you want to get a list of all files that ever existed, see here:
git log --pretty=format: --name-only --diff-filter=A | sort -u
66
The git ls-files
command will do what you need.
Source: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html
@JonnyJD, probably marked invalid because your edit should be a comment. – Ascherer – 2014-10-12T20:16:17.160
1@JonnyJD All Git man-pages are named as git-commit
, git-init
, git-ls-files
, etc. even though the programs are actually subcommands. There never was a git-ls-files
binary, most likely. The reasoning is that it's consistent with the external subcommand mechanism, which allows you to register a git foo
command by writing a git-foo
binary. – Radon Rosborough – 2017-07-19T16:50:08.153
5git ls-files
instead of git ls-tree -r master --name-only
is certainly simpler. – karatedog – 2013-10-22T08:14:05.767
1Sorry but my edit wasn't invalid. In current git there is no git-ls-files
binary. There is the git
binary with the ls-files
command. The link to the documentation is correct in content, but technically for an outdated binary. – JonnyJD – 2014-01-11T03:09:09.050
5
git ls-files
will only print files in the current working directory.
If, for instance, you have a git repo for dotfiles (core.worktree = /
), then you will have files outside the git root and that simple command won't work anymore.
In short, this will work:
git --git-dir "`git rev-parse --git-dir`" \
-C "`git config core.worktree || pwd`" \
ls-files
Example:
mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /
# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude
# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config
# `git status` would now print:
# new file: ../../../etc/ssh/sshd_config
# new file: README
git status
git commit -m "Initial commit"
# At this point, `git ls-files` prints only:
# README
git ls-files
# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files
If you want paths specified relative to your current (shell) directory, this does the job:
alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'
and in the example above, it would print
README
../../../etc/ssh/sshd_config
In git v2.21, git ls-files
shows all in the current directory and below. It just doesn't show files that were deleted in the repo. – Adrian – 2019-04-15T13:17:35.563
0
You can also use the gitk
interactive repository viewer.
2
This mentions a tool, but doesn't really answer the "how". Can you expand this into an actionable solution? Just pointing someone in a research direction for them to develop their own solution is more appropriate as a comment. Thanks. from review
– fixer1234 – 2018-03-12T22:39:36.530-2
Please have a look at the image, on right side there are two options patch and Tree. If you select tree, you can view the folder structure for each commit.
2Please consider a better commit to screen shot so you do not have to censor as much. – Thorbjørn Ravn Andersen – 2019-05-14T11:25:44.987
8Running "git ls-files" will save you a few characters :) – Zain R – 2015-05-14T21:30:21.990
Why was cut given the ending
-
? It causes some additional lines to show some files in a second column which are repeats from the first. – Adrian – 2019-04-15T13:06:40.487@Adrian No idea, copypasted back then, fixed now. – slhck – 2019-04-15T13:09:54.100
Replace
master
with$(git branch | grep \* | cut -d ' ' -f2)
for current branch. – Eduard – 2019-08-09T19:33:31.9171Thanks slhck, exactly what I was after - and useful to know about the second one too. Will mark as correct in 5 and a half minutes when I'm allowed. :-) – Anonymous – 2012-05-28T13:21:32.310
4Thanks for the answer. I was looking for this. Note that
git ls-tree -r master --name-only
would do the same as the first option, without needing thecut
. Ah, and you can specifyHEAD
instead ofmaster
if you just want this list for whatever branch you are currently on. – maurits – 2012-09-13T10:15:42.407