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기본적으로 다른 '무시' 파일도 존중하며 .gitignore
git 명령 대신 사용할 수 있습니다. 차이점은 아직 버전 제어에 커밋되지 않은 경우에도 모든 파일(숨겨진 파일 제외)이 나열된다는 것입니다.
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
).
또 다른 문제는 지원하는 패턴이 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
tree에는 2021년 12월에 출시된 버전 2.0.0부터 옵션이 있습니다 .
https://gitlab.com/OldManProgrammer/unix-tree/-/blob/master/CHANGES