¿Hay alguna manera de hacer que tree
no se muestren los archivos que se ignoran .gitignore
?
¿Hay alguna manera de hacer que tree
no se muestren los archivos que se ignoran .gitignore
?
Respuestas:
Esto podría ayudar: enumere los git
archivos ignorados de una manera casi compatible para el 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}" "$@"
}
El árbol apoya la -I
bandera.
-I pattern Do not list those files that match the wild-card pattern.
Tree admite un patrón único que excluirá todos los archivos / directorios que coincidan.
Los archivos de ignorar de Git son un poco más complicados:
La exclusión puede provenir de múltiples archivos, $HOME/.config/git/ignore
, la salida git config --get core.excludesfile
, .gitignore
(por directorio), ~/.gitignore
y más (ver man gitignore
).
Otro problema es que los patrones que tree
soportan difieren de lo que hace git (como lo señaló @Brad Urani).
Pero podemos acercarnos ...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
O como una función:
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 intentar encontrar el archivo. Lo que eso devuelva dependerá de la configuración que tenga.
~/.gitignore
es un enlace simbólico. He estado tratando de encontrar una manera de confiar git
para decirme lo que se ignora, pero todos mis esfuerzos por encontrar la combinación correcta siguen teniendo dificultades o situaciones ambiguas.
tree -I
que respeta todas las opciones globales que .gitignore
me hace pensar que no hay una solución perfecta. La mejor aproximación que se me ocurrió anoche es echo "node_modules|tmp|_build" > ~/.treeignore
ytree -I "$(cat ~/.treeignore)"
git ls-files
.