Tem árvore esconder arquivos gitignored

10

Existe uma maneira de fazer tree não mostrar arquivos que são ignorados em .gitignore ?

    
por Brad Urani 22.06.2016 / 05:27

2 respostas

1

Isso pode ajudar: listar git arquivos ignorados de uma maneira quase compatível para 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}" "$@"
}
    
por 14.09.2018 / 12:37
6

A árvore suporta o sinalizador -I .

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

A árvore suporta um único padrão que excluirá todos os arquivos / diretórios que correspondam a ele.

Os arquivos de ignorar do Git são um pouco mais complicados:

A exclusão pode vir de vários arquivos, $HOME/.config/git/ignore , a saída de git config --get core.excludesfile , .gitignore (por diretório), ~/.gitignore e mais (consulte man gitignore ).

Outro problema é que os padrões que tree suporta diferem do que o git faz (como observado por @Brad Urani).

Mas podemos nos aproximar ...

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

Ou como uma função:

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
}
    
por 22.06.2016 / 05:37

Tags