git ls-files
будет печатать только файлы в текущем рабочем каталоге.
Если, например, у вас есть git-репо для dotfiles ( core.worktree = /
), то у вас будут файлы вне корня git, и эта простая команда больше не будет работать.
Короче говоря, это будет работать:
git --git-dir "`git rev-parse --git-dir`" \ -C "`git config core.worktree || pwd`" \ ls-files
Пример:
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
Если вы хотите, чтобы пути были указаны относительно вашего текущего (shell) каталога, это сделает работу:
alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'
и в приведенном выше примере он будет печатать
README ../../../etc/ssh/sshd_config