Câu trả lời:
Điều này có thể giúp: liệt kê gitcác tệp bị bỏ qua theo cách gần như tương thích với treebộ lọc:
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}" "$@"
}
Cây đỡ -Icờ.
-I pattern Do not list those files that match the wild-card pattern.
Tree hỗ trợ một mẫu duy nhất sẽ loại trừ tất cả các tệp / thư mục phù hợp với nó.
Các tập tin bỏ qua của Git phức tạp hơn một chút:
Loại trừ có thể đến từ nhiều file, $HOME/.config/git/ignore, đầu ra của git config --get core.excludesfile, .gitignore(mỗi thư mục), ~/.gitignorevà nhiều hơn nữa (xem man gitignore).
Một vấn đề khác là các mẫu treehỗ trợ khác với những gì git làm (như được lưu ý bởi @Brad Urani).
Nhưng chúng ta có thể đến gần ...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
Hoặc như một chức năng:
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
}
gitcác lệnh để thử tìm tệp. Những gì trả về sẽ phụ thuộc vào những gì bạn có.
~/.gitignorelà một liên kết tượng trưng. Tôi đã cố gắng tìm cách dựa vào gitđể nói với tôi những gì bị bỏ qua, nhưng tất cả những nỗ lực của tôi để tìm ra sự kết hợp phù hợp tiếp tục gặp khó khăn hoặc tình huống mơ hồ.
tree -Itôn trọng tất cả các tùy chọn toàn cầu .gitignorekhiến tôi nghĩ rằng không có giải pháp hoàn hảo. Xấp xỉ tốt nhất tôi đã đưa ra tối qua là echo "node_modules|tmp|_build" > ~/.treeignorevàtree -I "$(cat ~/.treeignore)"
git ls-files.