Ağacın gitignored dosyalarını gizlemesini sağlayın


15

Yok treesayılan dosyaları göstermemenin bir yolu var mı .gitignore?


2
Tüm olası yok sayılan dosyaları dikkate almak istiyorsanız, çıktısını ayrıştırmaya çalışın git ls-files.
Franklin Yu

Yanıtlar:


5

Bu yardımcı olabilir: gityok sayılan dosyaları treefiltre 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}" "$@"
}

8

Ağaç -Ibayrağı 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) ~/.gitignoreve daha fazlasından gelebilir (bkz. man gitignore).

Başka bir sorun, treedestekleyen 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
}

Güzel! Bunun yorum satırlarını .gitignore'dan kaldırmaması sorunlara neden olur mu?
Brad Urani

Sanırım ev dizinin dışındaki .gitignore dosyalarına da saygı göstermeyecek
Brad

@BradUrani - gitDosyayı 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.
DarkHeart

Bu benim için çalışmıyor, sanırım çünkü benim ~/.gitignorebir sembolik. gitBana 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.
Brad Urani

Ayrıca, mükemmel bir çözüm olmadığını düşündüren tree -Itü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" > ~/.treeignorevetree -I "$(cat ~/.treeignore)"
Brad Urani
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.