Existe uma maneira de fazer tree
não mostrar arquivos que são ignorados .gitignore
?
Existe uma maneira de fazer tree
não mostrar arquivos que são ignorados .gitignore
?
Respostas:
Isso pode ajudar: a listar git
arquivos ignorados de uma maneira quase compatível para o tree
filtro:
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 árvore suporta a -I
bandeira.
-I pattern Do not list those files that match the wild-card pattern.
O Tree suporta um único padrão que excluirá todos os arquivos / diretórios correspondentes.
Os arquivos ignorados do Git são um pouco mais complicados:
Exclusão pode vir de vários arquivos, $HOME/.config/git/ignore
, a saída git config --get core.excludesfile
, .gitignore
(por diretório), ~/.gitignore
e mais (veja man gitignore
).
Outro problema é que os padrões tree
suportados diferem do que o git faz (como observado por @Brad Urani).
Mas podemos chegar perto ...
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
}
git
comandos para tentar encontrar o arquivo. O que isso retorna dependerá da configuração que você tiver.
~/.gitignore
é um link simbólico. Eu tenho tentado encontrar uma maneira de confiar git
para me dizer o que é ignorado, mas todos os meus esforços para encontrar a combinação certa continuam enfrentando dificuldades ou situações ambíguas.
tree -I
que respeita todas as opções de globbing que .gitignore
fazem, o que me faz pensar que não há solução perfeita. A melhor aproximação que eu vim com a noite passada é echo "node_modules|tmp|_build" > ~/.treeignore
etree -I "$(cat ~/.treeignore)"
git ls-files
.