Avoir un arbre masquer les fichiers gitignored

15

Existe-t-il un moyen de ne treepas afficher les fichiers ignorés .gitignore?

Brad Urani
la source
2
Si vous voulez vraiment considérer tous les fichiers ignorés possibles, essayez d'analyser la sortie de git ls-files.
Franklin Yu

Réponses:

5

Cela pourrait aider: répertorier les gitfichiers ignorés d'une manière presque compatible pour le treefiltre:

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}" "$@"
}
Jose Alban
la source
8

Tree prend en charge le -Idrapeau.

-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 treecharge 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
}
Cœur sombre
la source
Agréable! Ai-je raison de dire que le fait que cela ne supprime pas les lignes de commentaires de .gitignore causera des problèmes?
Brad Urani
Je suppose que cela ne respectera pas non plus les fichiers .gitignore en dehors du répertoire d'origine
Brad
@BradUrani - j'ai mis à jour ma réponse pour utiliser des gitcommandes pour essayer de trouver le fichier. Ce que cela rapporte dépendra de votre réglage.
DarkHeart
Cela ne fonctionne pas pour moi, je pense parce que mon ~/.gitignoreest un lien symbolique. J'ai essayé de trouver un moyen de m'appuyer gitpour 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.
Brad Urani
De plus, il semble que tree -Icela respecte toutes les options de globbing qui le .gitignorefont, 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" > ~/.treeignoreettree -I "$(cat ~/.treeignore)"
Brad Urani