มีต้นไม้ซ่อนไฟล์ gitignored


15

มีวิธีทำให้treeไม่แสดงไฟล์ที่ถูกละเว้น.gitignoreหรือไม่?


2
git ls-filesถ้าคุณอยากที่จะต้องพิจารณาไฟล์ละเว้นเป็นไปได้ทั้งหมดพยายามที่จะแยกการส่งออกของ
แฟรงคลินหยู

คำตอบ:


5

สิ่งนี้อาจช่วยได้: รายการ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}" "$@"
}

8

ต้นไม้รองรับ-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รองรับแตกต่างจากสิ่งที่คอมไพล์ทำ (ดังที่ระบุไว้โดย @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
}

ดี! ฉันแก้ไขความจริงที่ว่าการไม่ลบบรรทัดความคิดเห็นจาก. gitignore จะทำให้เกิดปัญหาหรือไม่
แบรด Urani

ฉันเดาว่ามันจะไม่เคารพไฟล์. gignignore นอกบ้าน dir 🤔
แบรด Urani

@BradUrani - ฉันได้อัปเดตคำตอบเพื่อใช้gitคำสั่งเพื่อลองค้นหาไฟล์ สิ่งที่ส่งกลับจะขึ้นอยู่กับการตั้งค่าที่คุณมี
DarkHeart

สิ่งนี้ไม่ได้ผลสำหรับฉันฉันคิดว่าเพราะฉัน~/.gitignoreเป็น symlink ฉันพยายามหาวิธีที่จะพึ่งพาgitเพื่อบอกฉันว่าสิ่งใดที่ถูกเพิกเฉย แต่ความพยายามทั้งหมดของฉันเพื่อค้นหาชุดค่าผสมที่ถูกต้องยังคงมีปัญหาหรือสถานการณ์ที่ไม่ชัดเจน
แบรด Urani

ดูเหมือนว่าtree -Iจะเคารพตัวเลือกที่กลมกลืน.gitignoreซึ่งทำให้ฉันคิดว่าไม่มีทางออกที่สมบูรณ์แบบ ประมาณการที่ดีที่สุดที่ฉันมากับคืนที่ผ่านมาเป็นecho "node_modules|tmp|_build" > ~/.treeignoreและtree -I "$(cat ~/.treeignore)"
แบรด Urani
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.