Відповіді:
Це може допомогти: перелічити git
ігноровані файли майже сумісним способом для tree
фільтра:
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}" "$@"
}
Дерево підтримує -I
прапор.
-I pattern Do not list those files that match the wild-card pattern.
Дерево підтримує єдиний шаблон, який виключатиме всі файли / каталоги, які відповідають йому.
Файли ігнорування Git дещо складніші:
Виключення може надходити з декількох файлів $HOME/.config/git/ignore
,, виводу git config --get core.excludesfile
, .gitignore
(за каталогом) ~/.gitignore
та іншого (див. man gitignore
).
Інша проблема полягає в тому, що шаблони, що tree
підтримують, відрізняються від того, що робить git (як зазначає @Brad Urani).
Але ми можемо наблизитися до ...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
Або як функція:
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
команди, щоб спробувати знайти файл. Те, що повертається, буде залежати від налаштувань.
~/.gitignore
- це симпосилання. Я намагався знайти спосіб покластися, git
щоб сказати мені, що ігнорується, але всі мої зусилля з пошуку правильної комбінації продовжують стикатися з труднощами або неоднозначними ситуаціями.
tree -I
чи поважають усі варіанти глобалізації, що .gitignore
робить, що змушує мене думати, що немає ідеального рішення. Найкраще наближення я прийшов з останньою ніччю echo "node_modules|tmp|_build" > ~/.treeignore
іtree -I "$(cat ~/.treeignore)"
git ls-files
.