Gibt es eine Möglichkeit, tree
Dateien, die ignoriert werden , nicht anzuzeigen .gitignore
?
Gibt es eine Möglichkeit, tree
Dateien, die ignoriert werden , nicht anzuzeigen .gitignore
?
Antworten:
Dies könnte helfen: git
Ignorierte Dateien für tree
Filter 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}" "$@"
}
Baum unterstützt die -I
Flagge.
-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/ignore
der Ausgabe von git config --get core.excludesfile
, .gitignore
(pro Verzeichnis) ~/.gitignore
und mehr erfolgen (siehe man gitignore
).
Ein weiteres Problem sind die tree
unterstü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
}
git
Befehle zu verwenden, um zu versuchen, die Datei zu finden. Was das zurückbringt, hängt von Ihrer Einstellung ab.
~/.gitignore
Link ein Symlink ist. Ich habe versucht, einen Weg zu finden, auf git
den 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.
tree -I
man alle globalen Optionen respektieren, .gitignore
was mich glauben lässt, dass es keine perfekte Lösung gibt. Die beste Annäherung, die ich mir echo "node_modules|tmp|_build" > ~/.treeignore
tree -I "$(cat ~/.treeignore)"
git ls-files
.