Czy istnieje sposób, aby tree
nie wyświetlać plików, które są ignorowane .gitignore
?
Czy istnieje sposób, aby tree
nie wyświetlać plików, które są ignorowane .gitignore
?
Odpowiedzi:
Może to pomóc: wyświetl listę git
ignorowanych plików w prawie zgodny sposób dla tree
filtru:
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}" "$@"
}
Drzewo obsługuje -I
flagę.
-I pattern Do not list those files that match the wild-card pattern.
Drzewo obsługuje pojedynczy wzorzec, który wyklucza wszystkie pasujące do niego pliki / katalogi.
Pliki ignorowania Gita są nieco bardziej skomplikowane:
Wykluczenie może pochodzić z wielu plików, $HOME/.config/git/ignore
danych wyjściowych git config --get core.excludesfile
, .gitignore
(według katalogu) ~/.gitignore
i innych (patrz man gitignore
).
Innym problemem jest to, że tree
obsługiwane wzorce różnią się od tego, co robi git (jak zauważył @Brad Urani).
Ale możemy się zbliżyć ...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
Lub jako funkcja:
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
poleceń, aby spróbować znaleźć plik. To, co powróci, zależy od tego, jakie masz ustawienie.
~/.gitignore
jest dowiązaniem symbolicznym. Próbowałem znaleźć sposób, aby polegać na git
informowaniu mnie o tym, co jest ignorowane, ale wszystkie moje wysiłki, aby znaleźć odpowiednią kombinację, napotykają trudności lub niejednoznaczne sytuacje.
tree -I
szanuje wszystkie opcje globowania, .gitignore
co sprawia, że uważam, że nie ma idealnego rozwiązania. Najlepszym przybliżeniem, jakie wymyśliłem ostatniej nocy, jest echo "node_modules|tmp|_build" > ~/.treeignore
itree -I "$(cat ~/.treeignore)"
git ls-files
.