MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

.gitignore 테스터

.gitignore와 파일 경로 목록을 붙여 넣으면 무시되는 경로와 그 근거가 되는 규칙 줄을 알려 줍니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

샘플

파일에 적힌 그대로 붙여 넣으세요.

한 줄에 하나씩, 저장소 루트 기준 상대 경로로 입력하세요. 디렉터리는 node_modules/처럼 /로 끝냅니다.

끄면 Linux의 Git과 같게 동작합니다. 켜면 Windows·macOS 체크아웃에서의 동작을 볼 수 있습니다.

결과

6/9
경로9
무시됨6
무시 안 됨3
  • 무시 안 됨src/index.ts일치하는 규칙 없음
  • 무시됨src/app.log9번째 줄: *.log
  • 무시됨node_modules/react/index.js2번째 줄: node_modules/
  • 무시됨dist/bundle.js5번째 줄: dist/
  • 무시됨logs/debug.log9번째 줄: *.log
  • 무시됨.env10번째 줄: .env
  • 무시됨.env.production11번째 줄: .env.*
  • 다시 포함됨.env.example12번째 줄: !.env.example
  • 무시 안 됨README.md일치하는 규칙 없음

참고: /로 끝나는 규칙은 디렉터리에만 적용되므로 디렉터리는 name/ 형태로 검사하세요.

규칙

  • 2node_modules/1
  • 5dist/1
  • 6.next/0
  • 9*.log2
  • 10.env1
  • 11.env.*1
  • 12!.env.example1

결정한 경로 · 어떤 결과도 결정하지 않음: 0

.gitignore 테스터는 저장소 없이 git check-ignore -v가 알려 주는 것을 알려 줍니다. 이 규칙에서 이 경로가 무시되는지, 어느 줄이 그렇게 결정했는지입니다. 한쪽 입력란에 .gitignore 내용을, 다른 쪽에 한 줄에 하나씩 상대 경로를 붙여 넣으면 모든 경로가 무시됨 또는 유지됨으로, 결정한 규칙의 줄 번호와 함께 나열됩니다.

gitignore가 답답해지는 순간을 위한 도구입니다. 아무 효과 없는 !keep.log 같은 부정 규칙, src/build까지 가려 버린 build 규칙, 패턴의 의미를 바꾸는 끝 슬래시 같은 경우입니다. 결과가 규칙 줄을 알려 주므로 추측하지 않고 정확한 줄을 고칠 수 있습니다.

규칙은 gitignore 명세를 구현한 ignore 패키지로 브라우저 안에서 평가하며 규칙과 경로는 어디로도 전송되지 않습니다. 이 테스터는 붙여 넣은 규칙만 평가하므로 실제 저장소가 가진 다른 무시 소스는 반영하지 않습니다.

사용 방법

  1. .gitignore 규칙 붙여 넣기

    주석과 빈 줄까지 포함해 파일 텍스트를 그대로 복사합니다. 결과의 줄 번호는 붙여 넣은 첫 줄부터 세므로 원래 순서를 유지하세요.

  2. 테스트할 경로 나열

    저장소 루트 기준 상대 경로를 한 줄에 하나씩, 슬래시로 구분해 입력합니다(역슬래시는 변환됩니다). 무시될 것으로 예상하는 경로와 src/app.ts처럼 유지될 것으로 예상하는 경로를 함께 넣으세요.

  3. 검사 실행

    입력하는 즉시 결과가 바뀝니다. 검사한 전체 경로 수, 무시된 경로 수, 무시되지 않은 경로 수를 보여 주고 현재 표시하는 경로를 상태와 결정한 규칙 줄과 함께 나열합니다. 목록과 트리는 현재 필터에서 각각 처음 500개 경로까지만 표시하지만 카운터는 전체 경로를 셉니다. 보기를 바꾸거나 무시된 경로·유지된 경로 필터로 결과를 좁힐 수 있습니다.

  4. 규칙 열 읽기

    무시된 경로에는 매치된 패턴의 줄 번호와 내용이 나옵니다. 유지된 경로는 매치된 규칙이 없으면 규칙이 표시되지 않고, ! 규칙이 다시 포함했다면 그 규칙의 줄이 표시됩니다. 규칙 패널은 규칙마다 결정한 경로 수를 세며, 0인 규칙은 어떤 결과도 결정하지 않으므로 오타이거나 다른 규칙에 가려졌거나 중복일 수 있습니다.

  5. 고치고 다시 실행

    의외였던 규칙을 고칩니다. 끝 슬래시를 붙이거나 부정 규칙을 덮어쓸 규칙 아래로 옮긴 뒤 모든 경로가 원하는 상태가 될 때까지 다시 실행하세요.

작동 원리

gitignore 패턴이 매치되는 방식

의미 규칙은 gitignore 매뉴얼(man gitignore, git-scm.com/docs/gitignore)에 있습니다. *.log나 build처럼 슬래시가 없는 패턴은 어떤 깊이에서든 매치됩니다. /build나 docs/*.md처럼 슬래시가 맨 앞이나 중간에 있으면 .gitignore가 있는 디렉터리를 기준으로 고정됩니다. dist/처럼 끝 슬래시가 있으면 디렉터리에만 매치됩니다. **는 디렉터리를 넘나듭니다. doc/**/*.md는 doc/a.md와 doc/x/y/b.md에 매치되고 **/temp는 어떤 깊이의 temp에도 매치됩니다.

#과 !은 첫 번째 칸에 있을 때만 특별한 뜻을 가집니다. 선행 공백은 패턴에 포함되고, 이스케이프하지 않은 후행 공백은 무시됩니다. 후행 공백을 패턴에 남기려면 역슬래시로 이스케이프하세요. 맨 앞의 #이나 !를 문자 그대로 매치하려면 \#file처럼 씁니다.

패턴매치매치되지 않음
*.loga.log, logs/app.loga.logs
/build루트의 build/a.jssrc/build/a.js
dist/packages/x/dist/a.js (dist 디렉터리)dist라는 파일
docs/*.mddocs/a.mddocs/sub/a.md
doc/**/*.mddoc/a.md, doc/x/y/b.mddocs/a.md

부정 규칙과 마지막 매치 우선

여러 규칙이 한 경로에 매치되면 마지막에 매치된 규칙이 이깁니다. 따라서 ! 규칙은 덮어쓰려는 규칙보다 뒤에 있어야 효과가 있습니다. Git에는 넘을 수 없는 제약이 하나 있습니다. 부모 디렉터리가 제외되어 있으면 그 안의 파일을 다시 포함할 수 없습니다. logs/ 다음에 !logs/keep.log를 쓰면 디렉터리 전체가 무시되므로 logs/keep.log도 무시된 채로 남습니다. logs/* 다음에 !logs/keep.log를 쓰면 디렉터리 자체는 무시되지 않고 내용물만 무시되므로 예외가 동작합니다.

logs/
!logs/keep.log      # 효과 없음: logs/ 디렉터리 자체가 제외됨

logs/*
!logs/keep.log      # 동작함: 항목만 제외됨

이 테스터가 읽지 않는 것

실제 저장소는 루트 .gitignore, 하위 .gitignore, .git/info/exclude, core.excludesFile이 가리키는 전역 파일을 합쳐서 판단하고, 이미 추적 중인 파일은 소급해서 무시되지 않습니다. 이 페이지는 붙여 넣은 규칙 하나만 평가합니다. 여기서 유지로 나온 경로도 다른 소스가 무시할 수 있고, 여기서 무시로 나온 경로도 규칙보다 먼저 커밋되었다면 계속 추적될 수 있습니다. 알려진 경계 차이도 하나 있습니다. foo/** 규칙에서 Git의 git check-ignore는 디렉터리 경로 foo/ 자체를 무시됨으로 보고하지만 이 도구는 해당 디렉터리 행을 유지로 표시합니다. foo/ 안의 파일 판정은 일치합니다.

실제 예시

기본 규칙과 부정 규칙 하나
입력
규칙:
node_modules/
*.log
!important.log

경로:
src/app.ts
logs/app.log
important.log
node_modules/react/index.js
출력
src/app.ts                   유지
logs/app.log                 무시됨   규칙 2번 줄
important.log                유지      3번 줄이 다시 포함
node_modules/react/index.js  무시됨   규칙 1번 줄

도구의 분석 함수를 직접 실행한 결과입니다. important.log는 3번 줄의 부정 규칙이 다시 포함하며 페이지는 그 줄을 결정한 규칙으로 표시합니다.

부모 디렉터리 규칙이 재포함을 막는 경우
입력
규칙 A:
logs/
!logs/keep.log

규칙 B:
logs/*
!logs/keep.log

경로:
logs/keep.log
logs/other.log
출력
규칙 A:  logs/keep.log 무시됨 (1번 줄), logs/other.log 무시됨 (1번 줄)
규칙 B:  logs/keep.log 유지, logs/other.log 무시됨 (1번 줄)
루트 고정과 어디서든 매치
입력
규칙:
/build
dist/

경로:
build/a.js
src/build/a.js
packages/x/dist/a.js
dist
출력
build/a.js              무시됨  규칙 1번 줄
src/build/a.js          유지
packages/x/dist/a.js    무시됨  규칙 2번 줄
dist                    유지

마지막 경로는 끝 슬래시 없는 dist라서 파일로 취급되고, 디렉터리 전용 규칙 dist/는 매치되지 않습니다. 디렉터리를 테스트하려면 dist/로 입력하세요.

예외가 있는 env 파일
입력
규칙:
*.env
.env*
!.env.example

경로:
.env
.env.local
.env.example
config/prod.env
출력
.env              무시됨  1번 줄
.env.local        무시됨  2번 줄
.env.example      유지
config/prod.env   무시됨  1번 줄
유효한 상대 경로가 아닌 경우
입력
규칙:
*.log

경로:
../secret.txt
/abs/a.log
./a.log
ok.log
출력
무시됨 1개 (ok.log, 1번 줄), 잘못된 경로 3개 (목록의 1, 2, 3번째 줄)

경로는 저장소 루트 기준 상대 경로여야 하며 /, ./, ../로 시작하면 안 됩니다.

자주 하는 실수

  • 부정 규칙을 규칙보다 앞에 둠

    마지막에 매치된 규칙이 이기므로 순서가 중요합니다. *.log 위에 둔 !keep.log는 아무 일도 하지 않습니다. 아래로 옮기세요.

  • 디렉터리를 제외해 놓고 그 안의 파일을 다시 포함하려 함

    Git은 제외된 디렉터리 안을 들여다보지 않습니다. 위 예시처럼 ! 규칙 앞에서는 dir/ 대신 dir/*를 쓰세요.

  • 끝 슬래시는 디렉터리 전용이라는 점을 잊음

    build/는 build라는 이름의 디렉터리를 무시하며 build라는 파일은 무시하지 않습니다. 이름만 쓰지 말고 이 도구가 처리하는 build/x.js처럼 디렉터리 안의 경로로 테스트하세요.

  • .gitignore가 추적을 해제해 준다고 기대

    규칙은 Git이 이미 추적 중인 파일에는 영향을 주지 않습니다. 그런 파일에는 git rm --cached를 한 번 실행해야 규칙이 적용됩니다.

  • 대소문자 구분이 리눅스의 Git과 다름

    여기서는 리눅스의 Git처럼 대소문자를 구분해서 매치하므로 규칙 Build/는 Build/x.js는 무시하지만 build/x.js는 무시하지 않습니다. Windows와 macOS의 Git은 보통 core.ignorecase=true로 동작해 둘 다 무시합니다. "대소문자 무시 (core.ignorecase)" 스위치를 켜면 그 동작을 볼 수 있으니, 팀이 쓰는 시스템의 대소문자 규칙으로 테스트하세요.

  • 규칙에 역슬래시 사용

    윈도우식 역슬래시가 있는 경로는 슬래시로 변환되지만 규칙은 변환되지 않습니다. 규칙의 역슬래시는 이스케이프 문자이므로 dist\bundle은 dist/bundle.js에 매치되지 않습니다.

자주 묻는 질문

파일이 왜 무시되는지 어떻게 알 수 있나요?

규칙과 경로를 붙여 넣으면 결정한 규칙의 줄 번호가 나옵니다. 실제 저장소에서 git check-ignore -v가 출력하는 것과 같은 정보입니다.

부정 규칙(!)이 왜 동작하지 않나요?

덮어쓰려는 규칙보다 앞에 있거나 부모 디렉터리가 제외되어 있기 때문입니다. 규칙 뒤에 두고, 예외가 필요하면 dir/ 대신 dir/*를 쓰세요.

.gitignore에서 끝 슬래시는 무슨 뜻인가요?

패턴을 디렉터리로 제한합니다. dist/는 dist라는 디렉터리와 그 아래 전부를 무시하지만 dist라는 파일은 무시하지 않습니다.

**는 무슨 역할을 하나요?

임의 개수의 디렉터리에 매치됩니다. **/temp는 어떤 깊이의 temp에도, doc/**/*.md는 doc 아래 어디의 마크다운 파일에도 매치됩니다.

내 저장소나 다른 .gitignore 파일을 읽나요?

아니요. 붙여 넣은 규칙과 경로만 평가합니다. 하위 .gitignore, .git/info/exclude, 전역 무시 파일은 포함되지 않습니다.

입력 제한은 어떻게 되나요?

규칙과 경로를 합쳐 512 KiB까지, 한 번에 최대 10,000개 경로를 테스트할 수 있습니다. 목록과 트리는 선택한 필터에서 처음 500개 경로만 표시하지만 카운터는 검사한 전체 경로를 반영합니다.

데이터가 업로드되나요?

아니요. 평가는 브라우저 안에서 실행됩니다.

마지막 업데이트: