tree
무시된 파일을 표시하지 않는 방법이 있습니까 .gitignore
?
답변1
다른 방법을 사용하는 경우트리 1.8.0
이 플래그를 지원하기 때문에 --fromfile
:
--fromfile
파일 시스템이 아닌 파일에서 디렉터리 목록을 읽습니다. 명령줄에 제공된 경로는 검색할 디렉터리가 아니라 읽을 파일입니다. 가리키다(
.
) 디렉토리는 트리가 표준 입력에서 경로를 읽어야 함을 나타냅니다.
이를 사용하여 git ls-tree
git에서 무시하지 않는 프로젝트의 모든 파일을 가져오고 출력을 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
립그랩기본적으로 .gitignore
(다른 "무시된" 파일과 함께) 존중되며 git 명령을 대체하여 사용할 수 있습니다. 차이점은 버전 관리에 커밋되지 않은 경우에도 모든 파일(숨겨진 파일 제외)이 나열된다는 것입니다.
rg --files | tree --fromfile
이는 먼저 디렉토리를 정렬하고 보다 유연한 사용을 허용하는 쉘 기능을 생성하는 데 사용할 수 있습니다(디렉토리 경로 지정 및 ripgrep 플래그 추가).
rg,tree() { rg --files $@|tree --fromfile --dirsfirst }
다른 답변에서 지적했듯이 tree > 1.8이 필요합니다.
답변3
트리는 -I
플래그를 지원합니다.
-I pattern
와일드카드 패턴과 일치하는 파일을 나열하지 마십시오.
트리는 일치하는 모든 파일/디렉터리를 제외하는 단일 패턴을 지원합니다.
Git의 무시 파일은 약간 복잡합니다.
제외는 여러 파일, $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
}
답변4
--gitignore
2021년 12월 출시된 버전 2.0.0부터는 tree에 대한 옵션이 있습니다.
https://gitlab.com/OldManProgrammer/unix-tree/-/blob/master/CHANGES