Yanıtlar:
Bu yardımcı olabilir: git
yok sayılan dosyaları tree
filtre için neredeyse uyumlu bir şekilde listeleyin :
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}" "$@"
}
Ağaç -I
bayrağı destekler .
-I pattern Do not list those files that match the wild-card pattern.
Ağaç, ona uyan tüm dosyaları / dizinleri hariç tutan tek bir deseni destekler.
Git'in görmezden gelme dosyaları biraz daha karmaşıktır:
Dışlama birden fazla dosyadan, $HOME/.config/git/ignore
çıktısı git config --get core.excludesfile
, .gitignore
(dizin başına) ~/.gitignore
ve daha fazlasından gelebilir (bkz. man gitignore
).
Başka bir sorun, tree
destekleyen desenlerin git'in yaptıklarından farklı olmasıdır (@Brad Urani tarafından belirtildiği gibi).
Ama yakın gelebilir ...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
Veya bir işlev olarak:
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
Dosyayı bulmayı denemek için komutları kullanmak için cevabımı güncelledim . Ne döndürdüğünüz, hangi ayara sahip olduğunuza bağlı olacaktır.
~/.gitignore
bir sembolik. git
Bana neyin ihmal edildiğini söylemeye güvenmenin bir yolunu bulmaya çalışıyordum , ancak doğru kombinasyonu bulmak için tüm çabalarım zorluklara veya belirsiz durumlara koşmaya devam ediyor.
tree -I
tüm globbing seçeneklerine saygı duyuyor gibi görünüyor .gitignore
. Dün gece geldiğim en iyi yaklaşım echo "node_modules|tmp|_build" > ~/.treeignore
vetree -I "$(cat ~/.treeignore)"
git ls-files
.