Gibt es eine Möglichkeit, treeDateien, die ignoriert werden , nicht anzuzeigen .gitignore?
Gibt es eine Möglichkeit, treeDateien, die ignoriert werden , nicht anzuzeigen .gitignore?
Antworten:
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}" "$@"
}
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
}
gitBefehle zu verwenden, um zu versuchen, die Datei zu finden. Was das zurückbringt, hängt von Ihrer Einstellung ab.
~/.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.
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)"
git ls-files.