Jawaban:
Ini mungkin membantu: daftar git
file yang diabaikan dalam cara yang hampir kompatibel untuk tree
filter:
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 -I
bendera.
-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/ignore
output dari git config --get core.excludesfile
, .gitignore
(per direktori) ~/.gitignore
,, dan lainnya (lihat man gitignore
).
Masalah lain adalah pola yang tree
mendukung 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
}
git
perintah untuk mencoba menemukan file. Apa yang mengembalikan akan tergantung pada pengaturan apa yang Anda miliki.
~/.gitignore
adalah symlink. Saya telah berusaha menemukan cara untuk mengandalkan git
untuk 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 -I
menghormati semua opsi globbing .gitignore
yang membuat saya berpikir tidak ada solusi yang sempurna. Perkiraan terbaik yang saya buat tadi malam adalah echo "node_modules|tmp|_build" > ~/.treeignore
dantree -I "$(cat ~/.treeignore)"
git ls-files
.