Avoir un arbre masquer les fichiers gitignored


15

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


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}" "$@"
}

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
}

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.