Haben Baum gitignored Dateien verstecken

15

Gibt es eine Möglichkeit, treeDateien, die ignoriert werden , nicht anzuzeigen .gitignore?

Brad Urani
quelle
2
Wenn Sie wirklich alle möglichen ignorierten Dateien berücksichtigen möchten, versuchen Sie, die Ausgabe von zu analysieren git ls-files.
Franklin Yu

Antworten:

5

Dies könnte helfen: gitIgnorierte Dateien für treeFilter nahezu kompatibel auflisten:

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
quelle
8

Baum unterstützt die -IFlagge.

-I pattern
   Do not list those files that match the wild-card pattern.

Tree unterstützt ein einzelnes Muster, das alle Dateien / Verzeichnisse ausschließt, die damit übereinstimmen.

Die Ignorierdateien von Git sind etwas komplizierter:

Der Ausschluss kann aus mehreren Dateien, $HOME/.config/git/ignoreder Ausgabe von git config --get core.excludesfile, .gitignore(pro Verzeichnis) ~/.gitignoreund mehr erfolgen (siehe man gitignore).

Ein weiteres Problem sind die treeunterstützten Muster, die sich von denen von Git unterscheiden (wie von @Brad Urani angegeben).

Aber wir können nah dran sein ...

tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"

Oder als Funktion:

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
}
Dunkles Herz
quelle
Nett! Stimmt es, dass die Tatsache, dass hierdurch keine Kommentarzeilen aus .gitignore entfernt werden, Probleme verursacht?
Brad Urani
Ich denke, es wird auch .gitignore-Dateien außerhalb des Heimverzeichnisses nicht respektieren
Brad
@BradUrani - Ich habe meine Antwort aktualisiert, um gitBefehle zu verwenden, um zu versuchen, die Datei zu finden. Was das zurückbringt, hängt von Ihrer Einstellung ab.
DarkHeart
Das funktioniert bei mir nicht, ich denke, weil mein ~/.gitignoreLink ein Symlink ist. Ich habe versucht, einen Weg zu finden, auf gitden ich mich verlassen kann, um zu sagen, was ignoriert wird, aber all meine Bemühungen, die richtige Kombination zu finden, stoßen immer wieder auf Schwierigkeiten oder zweideutige Situationen.
Brad Urani
Es sieht auch so aus, als würde tree -Iman alle globalen Optionen respektieren, .gitignorewas mich glauben lässt, dass es keine perfekte Lösung gibt. Die beste Annäherung, die ich mir echo "node_modules|tmp|_build" > ~/.treeignoretree -I "$(cat ~/.treeignore)"
gestern