how to `git ls-files` for just one directory level.

Philip Oakley picture Philip Oakley · May 4, 2012 · Viewed 15.5k times · Source

I'm using msysgit (1.7.9), and I'm looking for the right invocation of the git ls-files command to show just the (tracked) files and directories at the current level, either from the index, or the current working directory if that's easier.

Essentially it would give a directory listing similar that that you would see on Github. Coming from Windows, I'm not too familiar with the right way of doing the globbing(?).

Answer

jthill picture jthill · May 4, 2012

I think you want git ls-tree HEAD sed'd to taste. The second word of ls-tree's output will be tree for directories, blob for files, commit for submodules, the filename is everything after the ascii tab.

Edit: adapting from @iegik's comment and to better fit the question as asked,

git ls-files . | sed s,/.*,/, | uniq

will list the indexed files starting at the current level and collapse directories to their first component.