Có cây ẩn tập tin gitignored


15

Có cách nào để treekhông hiển thị các tập tin bị bỏ qua .gitignorekhông?


2
Nếu bạn thực sự muốn xem xét tất cả các tệp bị bỏ qua có thể, hãy thử phân tích đầu ra của git ls-files.
Franklin Yu

Câu trả lời:


5

Đ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}" "$@"
}

8

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
}

Đẹp! Tôi có đúng không khi thực tế rằng việc này không xóa các dòng nhận xét khỏi .gitignore sẽ gây ra sự cố?
Brad Urani

Tôi đoán nó cũng sẽ không tôn trọng các tập tin .gitignore bên ngoài thư mục nhà 🤔
Brad Urani

@BradUrani - Tôi đã cập nhật câu trả lời của mình để sử dụng 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ó.
DarkHeart

Điều này không hiệu quả với tôi, tôi nghĩ bởi vì tôi ~/.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ồ.
Brad Urani

Ngoài ra, có vẻ như 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" > ~/.treeignoretree -I "$(cat ~/.treeignore)"
Brad Urani
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.