Câu trả lời:
Điều này có thể giúp: liệt kê git
các tệp bị bỏ qua theo cách gần như tương thích với tree
bộ 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 đỡ -I
cờ.
-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), ~/.gitignore
và nhiều hơn nữa (xem man gitignore
).
Một vấn đề khác là các mẫu tree
hỗ 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
}
git
cá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ó.
~/.gitignore
là 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 -I
tôn trọng tất cả các tùy chọn toàn cầu .gitignore
khiế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" > ~/.treeignore
vàtree -I "$(cat ~/.treeignore)"
git ls-files
.