트리에서 gitignored 파일을 숨깁니다.

트리에서 gitignored 파일을 숨깁니다.

tree에서 무시되는 파일을 표시하지 않도록 하는 방법이 있습니까 .gitignore?

답변1

당신이 사용하는 경우 다른 방법이 가능합니다트리 1.8.0 플래그 를 지원하기 때문에 --fromfile:

--fromfile

    파일 시스템이 아닌 파일에서 디렉터리 목록을 읽습니다. 명령줄에 제공된 경로는 검색할 디렉터리가 아니라 읽을 파일입니다. 점 (.) 디렉토리는 트리가 표준 입력에서 경로를 읽어야 함을 나타냅니다.

프로젝트에서 git이 무시하지 않은 모든 파일을 가져 오고 git ls-tree출력을 tree.

ignored파일이 무시되는 git 저장소가 있다고 가정합니다 .gitignore.

git_repo
├── .gitignore
├── bar
│   ├── b.txt
│   └── ignored
├── foo
│   ├── a.txt
│   └── ignored
└── ignored

다음 명령:

git ls-tree -r --name-only HEAD | tree --fromfile

다음을 제공합니다:

.
├── .gitignore
├── bar
│   └── b.txt
└── foo
    └── a.txt

2 directories, 3 files

또는 특정 경로가 필요한 경우:

git ls-tree -r --name-only HEAD foo | tree --fromfile

다음을 제공합니다:

.
└── a.txt

0 directories, 1 file

주의사항

  • 조심하세요아직 커밋되지 않은 삭제되거나 이름이 변경된 파일과 같은 변경 사항으로 인해 git ls-tree동기화되지 않은 것으로 나타날 수 있습니다.

답변2

Ripgrep기본적으로 다른 '무시' 파일도 존중하며 .gitignoregit 명령 대신 사용할 수 있습니다. 차이점은 아직 버전 제어에 커밋되지 않은 경우에도 모든 파일(숨겨진 파일 제외)이 나열된다는 것입니다.

rg --files | tree --fromfile

이는 디렉토리를 먼저 정렬하고 보다 유연한 사용을 허용하는 쉘 기능을 생성하는 데 사용할 수 있습니다(디렉토리 경로 지정 및 ripgrep 플래그 추가).

rg,tree() { rg --files $@|tree --fromfile --dirsfirst }

다른 답변에서 지적한 대로 tree > 1.8이 필요합니다.

답변3

나무는 -I깃발을 지지합니다.

-I pattern

    와일드카드 패턴과 일치하는 파일을 나열하지 마십시오.

Tree는 일치하는 모든 파일/디렉터리를 제외하는 단일 패턴을 지원합니다.

Git의 무시 파일은 좀 더 복잡합니다.

$HOME/.config/git/ignore제외는 여러 파일, 의 출력 git config --get core.excludesfile, .gitignore(디렉터리별) ~/.gitignore등에서 발생할 수 있습니다 ( 참조 man gitignore).

또 다른 문제는 지원하는 패턴이 treegit의 기능과 다르다는 것입니다(@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
}

답변4

--gitignoretree에는 2021년 12월에 출시된 버전 2.0.0부터 옵션이 있습니다 .

https://gitlab.com/OldManProgrammer/unix-tree/-/blob/master/CHANGES

관련 정보