Skip to content

fix(gitignore): 넓은 부정이 빌드 산출물을 되살렸다 — catalog 아래 .pyc 재제외 - #64

Merged
bhyi4 merged 2 commits into
mainfrom
fix/negation-reincluded-build-artifacts
Aug 19, 2026
Merged

fix(gitignore): 넓은 부정이 빌드 산출물을 되살렸다 — catalog 아래 .pyc 재제외#64
bhyi4 merged 2 commits into
mainfrom
fix/negation-reincluded-build-artifacts

Conversation

@bhyi4

@bhyi4 bhyi4 commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator

pytest 를 한 번 돌리면 추적 중인 바이너리가 더러워진다:

$ python3 -m pytest tests/ -q && git status --porcelain
 M catalog/__pycache__/draft_specimen.cpython-310.pyc

원인 — "규칙 생기기 전에 커밋돼서"가 아니다

그럴듯하지만 틀렸다. .gitignore 1~2행에 __pycache__/·*.pyc있다. 범인은 26행이다:

.gitignore:26:!catalog/**   catalog/__pycache__/draft_specimen.cpython-310.pyc

!catalog/** 가 1~2행보다 뒤에 있어 그 규칙을 되돌린다.

그 부정은 07-27 에 다른 버그를 고치려고 넣은 것이다 — *promo* 가 경로 어디든 매칭돼 bug_derived_headroom_promoted_to_target.md 같은 정상 도감 항목을 조용히 삼켰다(그 사연이 .gitignore 22~25행 주석에 그대로 남아 있다). 그 수리는 옳았지만 범위가 넓어 빌드 산출물까지 되살렸다.

넓은 부정에는 좁은 재제외가 따라와야 한다.

고친 것

 !catalog/**
+catalog/**/__pycache__/
+catalog/**/*.pyc

+ 이미 추적 중이던 .pyc 한 장을 git rm --cached 로 제거.

검증 셋

.pyc 이 이제 무시된다 — check-ignore.gitignore:30
도감 .md여전히 무시 안 된다 — 07-27 부정의 원래 목적이 살아 있다
pytest 뒤 워킹트리에 의도한 변경만 남는다

473 passed.

분모 (오늘 규율)

catalog/ 아래 추적 중인 비-.md 파일은 2개였다 — 이 .pyc(제거)와 draft_specimen.py(정상 도구). 그 밖에 추적-그러나-무시 대상은 0.

⚠️ 이 분모를 처음엔 틀리게 셌다. git check-ignore--no-index 없이는 추적 파일을 보고하지 않아 "0건"이 나왔다 — 정확히 내가 찾던 경우가 조용히 빠진 것이다. 도구를 고쳐 다시 센 값이 위의 것이다.

출처

[자생]git diff --stat 에서 보고 .pyc 를 PR 에 실을 뻔했다고 알려왔다.
⚠️ 원인 진단은 그쪽 것과 다르다 — 위에 적은 대로 부정 규칙이 범인이고, "먼저 커밋돼서 ignore 가 못 뺀다"가 아니다.

bhyi4 and others added 2 commits August 19, 2026 12:38
`pytest` 를 한 번 돌리면 **추적 중인 바이너리가 더러워진다**:

    M catalog/__pycache__/draft_specimen.cpython-310.pyc

원인은 "규칙 생기기 전에 커밋돼서"가 아니다(그럴듯하지만 틀렸다). `.gitignore` 1~2행에
`__pycache__/`·`*.pyc` 가 **있고**, 26행의 **`!catalog/**`** 가 그보다 **뒤에 있어
그걸 다시 포함**시킨 것이다.

그 부정은 07-27 에 **다른 버그**를 고치려고 넣었다 — `*promo*` 가 경로 어디든 매칭돼
`bug_derived_headroom_promoted_to_target.md` 같은 정상 도감 항목을 조용히 삼켰다.
그 수리는 옳았지만 **범위가 넓어 빌드 산출물까지 되살렸다.**
⇒ **넓은 부정에는 좁은 재제외가 따라와야 한다.**

    !catalog/**
    catalog/**/__pycache__/     ← 추가
    catalog/**/*.pyc            ← 추가
    + `git rm --cached` 로 이미 추적 중이던 .pyc 한 장 제거

검증 셋:
  ① 그 .pyc 이 이제 무시된다(`check-ignore` → `.gitignore:30`)
  ② 도감 `.md` 는 여전히 무시 안 된다 — **07-27 부정의 원래 목적이 살아 있다**
  ③ `pytest` 뒤 워킹트리에 의도한 변경만 남는다(더럽혀지는 바이너리 없음)

분모: `catalog/` 아래 추적 중인 비-`.md` 파일은 **2개**였다 — 이 `.pyc`(제거)와
`draft_specimen.py`(정상 도구). 나머지 추적-그러나-무시 대상은 **0**.
⚠️ 이 분모를 처음엔 **틀리게 셌다**: `git check-ignore` 는 `--no-index` 없이는 추적 파일을
보고하지 않아 "0건"이 나왔다. 도구를 고쳐 다시 센 값이 위의 것이다.

발견 = [자생](오늘 `git diff --stat` 에서 보고 `.pyc` 를 PR 에 실을 뻔했다).
⚠️ 원인 진단은 그쪽 것과 다르다 — 위에 적은 대로 **부정 규칙**이 범인이다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
앞 커밋이 *"`!catalog/**` 가 되살렸고 **그래서** pytest 가 바이너리를 더럽혔다"* 라고
썼는데 그 **"그래서"가 틀렸다.**

실험으로 확인:

    printf '*.pyc\n' > .gitignore ; git add -f a.pyc ; git commit
    echo v2 > a.pyc ; git status --porcelain
    →  M a.pyc          # 무시 규칙에 걸려도 추적 파일이면 수정이 보고된다

⇒ **.gitignore 는 추적 파일에 아예 안 듣는다.** 그러니
· 증상(`pytest` 뒤 ` M …pyc`)의 원인은 **추적 상태**이지 26행이 아니고
· 26행이 설명하는 것은 **어떻게 추적으로 들어왔나 · `git rm --cached` 뒤에 왜 되살아나나** 다
· `check-ignore` 가 기본값에서 추적 파일을 안 보는 것도 같은 이유다 — 그 도구에겐
  추적 파일이 애초에 "무시 여부를 물을 대상"이 아니다

**수리 자체는 안 바뀐다** — 오히려 왜 둘 다 필요했는지가 분명해진다:
`git rm --cached` 만 하면 다음 넓은 `git add` 에 되살아나고, 재제외만 하면 이미 추적 중인
건 그대로다.

정정 출처 = [자생]. 앞 커밋 본문은 **지우지 않고** 이 커밋으로 덧댄다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@bhyi4

bhyi4 commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator Author

⚠️ 정정 — 앞 본문의 인과가 한 칸 틀렸다 (커밋 c77cad4 로 덧댐)

본문이 "!catalog/** 가 되살렸고 그래서 pytest 가 바이너리를 더럽혔다" 라고 썼는데 그 "그래서"가 틀렸다.

실험:

printf "*.pyc\n" > .gitignore ; git add -f a.pyc ; git commit
echo v2 > a.pyc ; git status --porcelain
→  M a.pyc      # 무시 규칙에 걸려도 추적 파일이면 수정이 보고된다

.gitignore 는 추적 파일에 아예 안 듣는다. 정확히 나누면:

증상(pytest M …pyc)의 원인 추적 상태 — 26행이 아니다
26행이 설명하는 것 어떻게 추적으로 들어왔나 · git rm --cached 뒤 왜 되살아나나
check-ignore 가 기본값에서 안 보는 이유 그 도구에겐 추적 파일이 애초에 "무시 여부를 물을 대상"이 아니다

수리 자체는 안 바뀐다 — 오히려 왜 둘 다 필요했는지가 분명해진다: git rm --cached 만 하면 다음 넓은 git add 에 되살아나고, 재제외만 하면 이미 추적 중인 건 그대로다.

정정 출처 = [자생]. 앞 본문은 지우지 않고 덧댄다. 473 passed 유지.

@bhyi4

bhyi4 commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator Author

자율 머지 (대장님 세션 위임). .gitignore에 catalog/ 아래 pycache/·*.pyc 좁은 재제외 추가(넓은 !catalog/** 부정이 빌드산출물 되살린 것 수리) + 실수로 추적된 .pyc 삭제. 빌드 위생·민감경로 아님·CI 4/4.

@bhyi4
bhyi4 merged commit ef67e21 into main Aug 19, 2026
4 checks passed
@bhyi4
bhyi4 deleted the fix/negation-reincluded-build-artifacts branch August 19, 2026 03:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant