Risposte:
Questo potrebbe aiutare: elencare i git
file ignorati in modo quasi compatibile per il 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}" "$@"
}
L'albero supporta la -I
bandiera.
-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/ignore
l'output di git config --get core.excludesfile
, .gitignore
(per directory) ~/.gitignore
e altro (vedi man gitignore
).
Un altro problema è che i modelli che tree
supportano 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
}
git
i comandi per tentare di trovare il file. Ciò che restituirà dipenderà dall'impostazione che hai.
~/.gitignore
è un collegamento simbolico. Ho cercato di trovare un modo su cui fare affidamento git
per dirmi cosa è stato ignorato, ma tutti i miei sforzi per trovare la giusta combinazione continuano a incorrere in difficoltà o situazioni ambigue.
tree -I
che rispetti tutte le opzioni globbing che .gitignore
fa, 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" > ~/.treeignore
etree -I "$(cat ~/.treeignore)"
git ls-files
.