Jawaban:
Ini mungkin membantu: daftar gitfile yang diabaikan dalam cara yang hampir kompatibel untuk treefilter:
function tree-git-ignore {
# tree respecting gitignore
local ignored=$(git ls-files -ci --others --directory --exclude-standard)
local ignored_filter=$(echo "$ignored" \
| egrep -v "^#.*$|^[[:space:]]*$" \
| sed 's~^/~~' \
| sed 's~/$~~' \
| tr "\\n" "|")
tree --prune -I ".git|${ignored_filter: : -1}" "$@"
}
Tree mendukung -Ibendera.
-I pattern Do not list those files that match the wild-card pattern.
Tree mendukung satu pola tunggal yang akan mengecualikan semua file / direktori yang cocok dengannya.
File abaikan Git sedikit lebih rumit:
Pengecualian dapat berasal dari banyak file,, $HOME/.config/git/ignoreoutput dari git config --get core.excludesfile, .gitignore(per direktori) ~/.gitignore,, dan lainnya (lihat man gitignore).
Masalah lain adalah pola yang treemendukung berbeda dari apa yang dilakukan git (seperti dicatat oleh @Brad Urani).
Tapi kita bisa dekat-ish ...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
Atau sebagai fungsi:
function gtree {
git_ignore_files=("$(git config --get core.excludesfile)" .gitignore ~/.gitignore)
ignore_pattern="$(grep -hvE '^$|^#' "${git_ignore_files[@]}" 2>/dev/null|sed 's:/$::'|tr '\n' '\|')"
if git status &> /dev/null && [[ -n "${ignore_pattern}" ]]; then
tree -I "${ignore_pattern}" "${@}"
else
tree "${@}"
fi
}
gitperintah untuk mencoba menemukan file. Apa yang mengembalikan akan tergantung pada pengaturan apa yang Anda miliki.
~/.gitignoreadalah symlink. Saya telah berusaha menemukan cara untuk mengandalkan gituntuk memberi tahu saya apa yang diabaikan, tetapi semua upaya saya untuk menemukan kombinasi yang tepat terus berjalan ke dalam kesulitan atau situasi yang ambigu.
tree -Imenghormati semua opsi globbing .gitignoreyang membuat saya berpikir tidak ada solusi yang sempurna. Perkiraan terbaik yang saya buat tadi malam adalah echo "node_modules|tmp|_build" > ~/.treeignoredantree -I "$(cat ~/.treeignore)"
git ls-files.