답변:
필터 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}" "$@"
}
트리는 -I
플래그를 지원합니다 .
-I pattern Do not list those files that match the wild-card pattern.
트리는 단일 패턴을 지원하여 일치하는 모든 파일 / 디렉토리를 제외합니다.
힘내 무시 파일은 조금 더 복잡합니다.
제외는 여러 파일에서 올 수 $HOME/.config/git/ignore
, 출력 git config --get core.excludesfile
, .gitignore
(디렉토리 당), ~/.gitignore
등 (참조 man gitignore
).
또 다른 문제는 tree
지원 하는 패턴이 git과 @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
}
git
명령을 사용 하여 파일을 찾으려고 내 답변을 업데이트했습니다 . 반환되는 내용은 설정에 따라 다릅니다.
~/.gitignore
심볼릭 링크 이기 때문에 생각 합니다. 나는 git
무시 된 것을 말해 줄 수있는 방법 을 찾으려고 노력했지만 올바른 조합을 찾기위한 모든 노력은 계속해서 어려움이나 모호한 상황에 처하게됩니다.
tree -I
모든 글 로빙 옵션을 존중 하는 것처럼 보입니다 .gitignore
. 내가 어제 밤에 와서 제일 근사하다 echo "node_modules|tmp|_build" > ~/.treeignore
와tree -I "$(cat ~/.treeignore)"
git ls-files
.