커밋 노트
커밋 메시지는 한 번 쓰이고 나면 얼어붙어요. 그걸 바꾸면 커밋이 다시 쓰이고, 새 해시를 갖게 되고, 이미 옛 커밋을 가진 사람 전부가 깨져요. 커밋한 지 한 시간 뒤라면 괜찮지만, 일주일 뒤라면 불가능한 일이에요.
git notes가 그 탈출구예요. 노트는 커밋 옆에, refs/notes/commits 아래에
저장되고, 노트를 붙여도 커밋은 바이트 하나 다르지 않게 그대로예요. 그래서 이미
공개된 히스토리에도 쓸 수 있어요 — 무언가를 덧붙이고 싶어지는 건 정확히 그때니까요.
흔한 쓰임새는 이런 것들이에요. 이 커밋을 승인한 리뷰, 이 커밋이 닫은 티켓, 왜 되돌렸는지, 어느 릴리스에 실려 나갔는지.
노트 쓰기
커밋을 선택하세요. 메시지 아래에 노트 섹션이 있어요. 노트 추가를 누르고, 입력하고, 노트 저장을 누르세요. 여러 줄도 괜찮아요.

노트를 저장하는 것은 평범한 Gitcito 동작이에요. 토스트가 뜨고, 되돌리기를 하면 이전 텍스트가 돌아와요. 지웠던 노트를 복원하는 것까지 포함해서요.
텍스트를 비우고 저장하면 노트가 지워져요. 빈 노트라는 것은 없거든요.
노트 찾기
노트는 평범한 로그에서는 보이지 않아요. 사람들이 노트를 끝내 발견하지 못하는 가장 큰 이유죠. Gitcito는 노트를 지닌 커밋에 그래프의 메시지 열에 작은 노트 아이콘을 달아 줘요. 그래서 거기 있다는 걸 몰라도 그 주석을 찾을 수 있어요.
명령줄에서는 git log --notes가 각 메시지 아래에 노트를 찍어 줘요.
노트 공유하기
여기서 모두가 놀라요. 평범한 git push는 노트를 푸시하지 않고, 평범한 git fetch는 노트를 가져오지 않아요. 노트는 refs/heads와 refs/tags 바깥에 살기
때문에, 기본 refspec이 아예 건너뛰거든요. 여러분 노트북에서 쓴 노트는 누군가
명시적으로 옮기기 전까지 그 노트북에 머물러요.
도구 → 노트 → 노트 푸시 / 노트 페치를 원격별로 쓰세요. 실행되는 것은 이거예요.
git push <remote> refs/notes/commits
git fetch <remote> +refs/notes/commits:refs/notes/commits
옮겨지는 것은 커밋 노트 레퍼런스뿐이에요 — Gitcito 자신의 기기 로컬 레퍼런스(로컬 CI 판정 같은 것)는 일부러 공개하지 않아요.
일부 호스트는 자기 쪽에서 노트를 켜거나 허용해야 해요. 거기서 거부당한다면 그건 호스트의 정책이지 Gitcito의 한계가 아니에요.
공유 원격이 없거나 쓰기 권한이 없나요? 안전한 공유가 저장소의 노트를 암호화된 파일로 묶어 주고, 팀 동료가 그걸 바로 가져올 수 있어요. 무엇이 들어올지 미리 보여 주고, 갈라진 노트에는 명시적인 덮어쓰기 선택이 있어요.
한계
- 노트 레퍼런스는 하나뿐이에요. Gitcito는 기본값인
refs/notes/commits만 읽고 써요. 사용자 정의 네임스페이스(git notes --ref=review)는 노출되지 않아요 — 그런 걸 쓰는 저장소라면 여기서는 그 노트가 보이지 않아요. - 갈라진 노트를 머지하지는 않아요. 두 사람이 같은 커밋에 주석을 달고 둘 다
푸시하면, git이 두 번째 푸시를 거부해요. 그걸 푸는 방법은 터미널
에서
git notes merge를 쓰는 거예요. - 노트는 정리 백업으로도, 스냅숏으로도 백업되지 않아요. 노트는 평범한 레퍼런스라서 일반적인 작업에는 살아남지만, 처음부터 다시 클론한 저장소는 노트 없이 시작해요.