갑자기 커밋 해시는 어떤 정보를 기반하여 만들어지는지 궁금했다.
커밋 해시는 커밋 git commit
할 때 생성되고,
주로 커밋 해시로 파일들을 특정 상태로 맞추는데 git checkout
사용한다.
그런데 커밋 할 때 해시가 충돌하지는 않을까? 싶어서 찾아봤다.
먼저, git-scm의 글 SHA-1 해시 값에 대한 단상에서 걱정에 대한 현실적인 조언을 해 준다. 또 실제로 발생하면 어떤 일이 일어나는지 알려준다.
그래도 운이 정말 나빠서, 해시 충돌이 나는 것이 우려된다면 리누스 토발즈도 이 이슈에 대해 언급했다. 아쉽게도 원글이 있던 google+가 종료되어 볼 수 없지만 예전에 올라온 나프다 게시글에 누군가 요약해 주었다.
사람이 소스코드의 변경을 지켜보고 있기 때문에 괜찮고, 또 대안은 있다고..
사실 가장 먼저 본 글은 SO의 글이다.
답변에서,
기발하게도 해시 사이즈를 4-bit로 줄여서 실제로 재현했다. push
, clone
할 때 에러가 난다.
커밋 해시가 무엇으로 결정되는지 알려주는 SO 글. 부모 커밋, 커미터, 메시지 등.
뻘글) git 불안해서 못쓰겟음니다 -.-;
찾다가 나온 유머글 ㅎㅎ. 덧글에 있는 만화처럼 걱정, 우려만 해서는 안되겠다.
sha1 충돌 이슈에 설명. 해시에 대한 기초 설명, 구글이 sha-1 충돌 재현에 대한 주변 설명.
이 글엔 실제로 다른 파일인데 같은 MD5 sum을 가진 예제를 제공한다. 근데 다운받아보면 실행도 안되고, 바이너리지만 열어보면 내용도 같아 보이는데.. 심지어 파일 크기도 같다 :(