Réponses:
Cela pourrait aider: répertorier les git
fichiers ignorés d'une manière presque compatible pour le tree
filtre:
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}" "$@"
}
Tree prend en charge le -I
drapeau.
-I pattern Do not list those files that match the wild-card pattern.
Tree prend en charge un modèle unique qui exclura tous les fichiers / répertoires qui lui correspondent.
Les fichiers ignorés de Git sont un peu plus compliqués:
L'exclusion peut provenir de plusieurs fichiers $HOME/.config/git/ignore
,, de la sortie de git config --get core.excludesfile
, .gitignore
(par répertoire) ~/.gitignore
, et plus (voir man gitignore
).
Un autre problème est que les modèles pris en tree
charge diffèrent de ce que fait git (comme l'a noté @Brad Urani).
Mais nous pouvons obtenir de près ...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
Ou en fonction:
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
commandes pour essayer de trouver le fichier. Ce que cela rapporte dépendra de votre réglage.
~/.gitignore
est un lien symbolique. J'ai essayé de trouver un moyen de m'appuyer git
pour me dire ce qui est ignoré, mais tous mes efforts pour trouver la bonne combinaison continuent de se heurter à des difficultés ou à des situations ambiguës.
tree -I
cela respecte toutes les options de globbing qui le .gitignore
font, ce qui me fait penser qu'il n'y a pas de solution parfaite. La meilleure approximation que j'ai trouvée la nuit dernière est echo "node_modules|tmp|_build" > ~/.treeignore
ettree -I "$(cat ~/.treeignore)"
git ls-files
.