Chiedi all'albero di nascondere i file gitignored


15

C'è un modo per treenon mostrare i file ignorati .gitignore?


2
Se vuoi davvero considerare tutti i possibili file ignorati, prova ad analizzare l'output di git ls-files.
Franklin Yu,

Risposte:


5

Questo potrebbe aiutare: elencare i gitfile ignorati in modo quasi compatibile per il treefiltro:

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

L'albero supporta la -Ibandiera.

-I pattern
   Do not list those files that match the wild-card pattern.

Tree supporta un singolo modello che esclude tutti i file / directory che lo corrispondono.

I file ignorati di Git sono un po 'più complicati:

L'esclusione può provenire da più file, $HOME/.config/git/ignorel'output di git config --get core.excludesfile, .gitignore(per directory) ~/.gitignoree altro (vedi man gitignore).

Un altro problema è che i modelli che treesupportano differiscono da ciò che fa git (come notato da @Brad Urani).

Ma possiamo avvicinarci ...

tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"

O come una funzione:

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
}

Bello! Sono corretto che il fatto che questo non rimuova le righe di commento da .gitignore causerà problemi?
Brad Urani,

Suppongo che non rispetterà anche i file .gitignore fuori dalla home dir 🤔
Brad Urani,

@BradUrani - Ho aggiornato la mia risposta a utilizzare giti comandi per tentare di trovare il file. Ciò che restituirà dipenderà dall'impostazione che hai.
DarkHeart,

Questo non funziona per me, penso perché il mio ~/.gitignoreè un collegamento simbolico. Ho cercato di trovare un modo su cui fare affidamento gitper dirmi cosa è stato ignorato, ma tutti i miei sforzi per trovare la giusta combinazione continuano a incorrere in difficoltà o situazioni ambigue.
Brad Urani,

Inoltre sembra tree -Iche rispetti tutte le opzioni globbing che .gitignorefa, il che mi fa pensare che non ci sia una soluzione perfetta. Migliore approssimazione mi si avvicinò con la notte scorsa è echo "node_modules|tmp|_build" > ~/.treeignoreetree -I "$(cat ~/.treeignore)"
Brad Urani
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.