도구스개발

Git 객체 해시 계산기

Git이 파일에 붙이는 해시(blob SHA)를 브라우저에서 바로 계산합니다. 머리말을 왜 붙이는지, 줄 끝 문자와 끝의 줄바꿈이 해시를 어떻게 바꾸는지 함께 봅니다.

여기 넣은 내용은 브라우저 밖으로 나가지 않습니다.

echo hello로 만든 파일입니다. 한 바이트 차이로 해시가 통째로 다릅니다.

파일 하나의 내용입니다. 이름과 경로는 들어가지 않습니다.

사용 방법

  1. 1파일 내용을 붙여 넣습니다. 예시를 골라 눌러 볼 수도 있습니다.
  2. 2줄 끝 문자를 그대로 둘지 LF·CRLF로 맞출지 고릅니다.
  3. 3객체 종류와 해시 방식을 고릅니다. 보통은 blob과 SHA-1입니다.
  4. 4해시와 머리말, 바이트 수를 확인합니다. 머리말 없이 해싱한 값과도 견줘 봅니다.

자주 묻는 질문

SHA-1("blob " + 바이트수 + "\0" + 내용) 입니다. 내용을 그대로 해싱하는 것이 아니라 앞에 머리말을 붙입니다. "hello"(줄바꿈 없음)는 b6fc4c62…, "hello\n"은 ce013625… 입니다.

같은 바이트열이라도 종류가 다르면 다른 해시가 되게 하려는 것입니다. 파일(blob)·디렉터리(tree)·커밋(commit)·태그(tag)가 한 저장소에 섞여 있기 때문입니다. 바이트 수를 넣는 것은 이어 붙인 데이터의 경계를 속이지 못하게 하기 위해서입니다.

대부분 줄 끝 문자나 끝의 줄바꿈 차이입니다. CRLF로 저장한 파일은 LF로 저장한 것과 해시가 다르고, echo는 뒤에 줄바꿈을 붙이지만 printf는 붙이지 않습니다. 윈도우에서 core.autocrlf를 켜면 커밋할 때 LF로 바꿔 저장하므로 작업 폴더의 값과 저장소의 값이 갈립니다.

들어가지 않습니다. blob은 내용만 담고, 이름과 경로는 tree가, 시각과 작성자는 commit이 들고 있습니다. 그래서 같은 파일을 열 군데에 복사해도 저장소에는 blob 하나만 남습니다. Git을 내용 주소 지정 저장소라고 부르는 이유입니다.

내용이 같으면 해시가 같기 때문입니다. 빈 파일은 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391로, 어느 저장소에서나 같은 값이 나옵니다. Git을 쓰다 보면 이 해시를 자주 보게 됩니다.

git init --object-format=sha256으로 만든 저장소에서 씁니다. 머리말 규칙은 같고 해시 함수만 바뀝니다. SHA-1의 충돌 공격이 알려진 뒤 대비로 도입됐지만, 아직 대부분의 저장소는 SHA-1을 씁니다.

알아두면 좋은 점

  • 넣은 내용은 브라우저 안에서만 처리되며 서버로 전송되지 않습니다.
  • 텍스트만 다룹니다. 이진 파일은 명령줄에서 git hash-object를 쓰세요.
  • tree 객체는 내용이 이진 형식이라 이 계산기로 직접 만들 수 없습니다. 종류를 골라 머리말이 어떻게 달라지는지만 볼 수 있습니다.
  • 계산 결과는 실제 git hash-object로 열 가지 입력을 대조해 확인했습니다. SHA-256 값은 --object-format=sha256 저장소에서 받은 값과 맞췄습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 8월 30일 · 결과는 참고용 추정치입니다.