# Glob 및 .gitignore 테스터

경로 목록에 glob 패턴과 .gitignore 규칙을 시험해 어떤 경로가 어떤 규칙으로 일치하는지 확인합니다.

https://codeknife.dev/ko/glob-teseuteo/

## 기능

경로 목록에 glob 패턴과 `.gitignore` 규칙을 시험합니다. 각 경로에 일치 여부와 원인이 된 패턴이 함께 표시되어, `src/lib/util.test.ts`가 포함되거나 제외되는 이유를 알 수 있습니다.

## 사용 방법

1. **경로**에 한 줄에 경로 하나씩 붙여 넣거나 텍스트 파일을 놓습니다.
2. **패턴**에 한 줄에 패턴 하나씩 씁니다. `#`로 시작하는 줄은 주석입니다.
3. **Glob**, **Bash**, **Gitignore**를 고르고 모든 경로, 일치만, 불일치만 표시합니다.
4. 결과를 복사합니다.

## 예시

패턴 `src/**/*.ts`와 `!**/*.test.ts`에서 경로 `src/lib/util.ts`는 일치하고 `src/lib/util.test.ts`는 제외가 우선하여 일치하지 않습니다. `.gitignore` 규칙 `*.log`와 `!keep.log`에서는 `app.log`는 무시되고 `keep.log`는 무시되지 않습니다.

## 알아 두면 좋은 점

- `*`는 한 디렉터리 안에 머물고 `**`는 디렉터리를 가로지르며 `?`, `[ab]`, `{a,b}`는 picomatch처럼 동작합니다.
- `.env` 같은 점 파일은 **점 파일 포함**을 켜거나 패턴이 점을 명시할 때만 일치합니다.
- Glob과 Bash에서 `!`로 시작하는 패턴은 다른 패턴이 찾은 것을 제외합니다. Gitignore에서는 Git처럼 마지막으로 일치한 규칙이 우선합니다.
- Bash는 `globstar`가 없는 셸처럼 `**`를 일반 `*`로 읽습니다.
- 경로는 텍스트로 비교됩니다. 디스크에서 아무것도 읽지 않습니다.

## 세 가지 구문은 무엇이 다른가요?

Glob은 대부분의 빌드 도구가 쓰는 picomatch 구문입니다. *는 한 디렉터리 안에 머물고 **는 디렉터리를 가로지르며, {a,b} 같은 중괄호, [ab] 같은 문자 클래스, ?도 동작합니다. Bash는 globstar가 없는 셸처럼 **를 일반 *로 읽습니다. Gitignore는 .gitignore 규칙을 따릅니다. 끝의 /는 디렉터리, 앞의 /는 루트 고정을 뜻하며, 뒤의 ! 규칙은 앞선 규칙이 무시한 것을 다시 포함합니다.

## 자주 묻는 질문

### 경로 옆에 어떤 규칙이 표시되나요?

처음으로 일치한 패턴입니다. glob과 bash에서 제외(!로 시작하는 패턴)로 빠진 경로에는 그 제외가 표시됩니다. gitignore에서는 그 경로를 무시한 규칙이 표시됩니다.

### *가 점으로 시작하는 파일과 일치하지 않는 이유는?

패턴이 점을 명시하지 않으면 glob은 점 파일을 건너뜁니다. 점 파일 포함을 켜면 bash의 dotglob처럼 *와 ?가 일치합니다. .gitignore에는 이 스위치가 없습니다.

### 이 도구는 경로를 어딘가로 보내나요?

아니요. 모든 작업은 브라우저에서 이루어집니다. 입력한 내용은 우리 서버로 전송되지 않습니다.