पेड़ को 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समर्थन करता है जो गिट से भिन्न होता है (जैसा कि @ ब्रैड उरानी द्वारा नोट किया गया है)।

लेकिन हम करीब- ish प्राप्त कर सकते हैं ...

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
}

अच्छा! क्या मैं सही हूं कि इस तथ्य को टिप्पणी लाइनों से नहीं हटाया जा रहा है।
ब्रैड उरानी

मुझे लगता है कि यह भी सम्मान के लिए नहीं जा रहा है। घर के बाहर .ignignore फाइलें
Brad

@BradUrani - मैंने gitफ़ाइल खोजने का प्रयास करने के लिए आदेशों का उपयोग करने के लिए अपना उत्तर अपडेट किया है । वह रिटर्न क्या आप पर निर्भर करता है कि आपके पास क्या सेटिंग है।
डार्कहार्ट

यह मेरे लिए काम नहीं कर रहा है, मुझे लगता है कि क्योंकि मेरी ~/.gitignoreएक सहानुभूति है। मैं इस बात पर भरोसा करने का एक तरीका ढूंढने की कोशिश कर रहा gitहूं कि मुझे क्या अनदेखा किया गया है, लेकिन सही संयोजन खोजने के मेरे सभी प्रयास कठिनाइयों या अस्पष्ट स्थितियों में चलते रहते हैं।
ब्रैड उरानी

इसके अलावा ऐसा लगता है कि tree -Iसभी ग्लोबिंग विकल्पों का सम्मान .gitignoreकरता है जो मुझे लगता है कि कोई सही समाधान नहीं है। बेस्ट सन्निकटन मैं कल रात के साथ आया है echo "node_modules|tmp|_build" > ~/.treeignoreऔरtree -I "$(cat ~/.treeignore)"
ब्रैड Urani
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.