깃허브에서 커밋을 하다 보면 아래의 이미지와 같이 해시를 볼 수 있다.
이걸 왜 사용하는 걸까 궁금했다. 파일이 변경되었는지를 확인하기 위해 사용하는 것 같긴 한데, 단순히 파일 내용만을 비교하는 건 아닌 거 같았다. 그리고 내용만 비교할 거면 line by line으로 하면 되는데, 왜 해시 함수를 거치는지 궁금했다.
답은 리눅스 토발즈가 2007년에 구글에서 Git을 발표한 동영상(https://youtu.be/4XpnKHJAok8?t=3389)에서 찾을 수 있었다.
위 동영상의 내용은 stackoverflow(https://stackoverflow.com/questions/28792784/why-does-git-use-a-cryptographic-hash-function)에도 잘 정리되어 있는데, 결론만 말하면 일관성 체크, 데이터의 신뢰성을 위해서다.
We check checksums that is considered cryptographically secure. Nobody has been able to break SHA-1, but the point is, SHA-1 as far as git is concerned, isn't even a security feature. It's purely a consistency check. The security parts are elsewhere. A lot of people assume since git uses SHA-1 and SHA-1 is used for cryptographically secure stuff, they think that it's a huge security feature. It has nothing at all to do with security, it's just the best hash you can get.
Having a good hash is good for being able to trust your data, it happens to have some other good features, too, it means when we hash objects, we know the hash is well distributed and we do not have to worry about certain distribution issues. Internally it means from the implementation standpoint, we can trust that the hash is so good that we can use hashing algorithms and know there are no bad cases. So there are some reasons to like the cryptographic side too, but it's really about the ability to trust your data. I guarantee you, if you put your data in git, you can trust the fact that five years later, after it is converted from your harddisc to DVD to whatever new technology and you copied it along, five years later you can verify the data you get back out is the exact same data you put in. And that is something you really should look for in a source code management system.
해시 함수를 사용하면 성능도 챙길 수 있다.
파일을 수정하고 'git status'를 입력하면 modified 된 파일이 무엇인지, 새로 추가된 파일이 뭔지 확인할 수 있다. 이걸 깃허브에서 파일을 한 줄, 한 줄 다 비교할까? 코드가 10만 줄이라고 생각해보면 한줄한줄 비교한다면 너무 많은 시간이 걸릴 거다.
그래서 해시 함수를 사용한다. 해시썸을 해서 해시 값을 저장해두었다가, 'git status'를 입력하면 기존에 저장된 해시 값과 현재 파일에 해시 썸을 한 해시 값이 같은지 비교해서 파일 변경 여부를 확인한다.
변경이 되지 않았다면 확인할 필요 없을 것이고, 변경되었을 경우에만 확인하면 된다.
'Trial and Error > Git' 카테고리의 다른 글
Git remote branch name change과 latest commit message change (0) | 2020.07.27 |
---|---|
.git 폴더의 정체 (0) | 2020.07.27 |
Git remote branch 가져오기 (0) | 2020.07.27 |