git ls-files
somente imprimirá arquivos no diretório de trabalho atual.
Se, por exemplo, você tiver um repositório git para dotfiles ( core.worktree = /
), então você terá arquivos fora da raiz do git e esse comando simples não funcionará mais.
Em suma, isso funcionará:
git --git-dir "'git rev-parse --git-dir'" \
-C "'git config core.worktree || pwd'" \
ls-files
Exemplo:
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
Se você quiser caminhos especificados relativos ao seu diretório atual (shell), isso faz a tarefa:
alias gls='git ls-tree -r master --name-only HEAD "'git config core.worktree'"'
e no exemplo acima, imprimiria
README
../../../etc/ssh/sshd_config