GitNotes.30-5.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 30.5: Commit Object 란?

commit 객체는 많은 git 사용자들이 이미 git commit 명령어로 생성해 내는 데에 익숙하기 때문에, 아마도 가장 친숙한 객체 타입일 것이다.

그러나, 실제 commit 객체는 어떠한 변경된 파일이나 데이터를 직접적으로 포함하고 있지는 않다. 실제로는, 해당 commit 의 실제 내용물을 포함하는 다른 객체들에 대한 메타데이터와 pointer 등을 포함하게 되어 있다.

하나의 commit 객체는 아래와 같은 몇가지를 포함하고 있다:

  • tree 의 해시값
  • 부모 commit 의 해시값
  • 작성자의 이름 및 이메일 주소, 커미터의 이름 및 이메일 주소
  • 커밋 메시지

사용자들은 아래와 같은 방법으로 다른 commit 의 내용을 확인할 수 있다:

$ git cat-file commit 5bac93 tree 04d1daef... parent b7850ef5... author Geddy Lee <glee@rush.com> commiter Neil Peart <npeart@rush.com> First commit!

Tree

한가지 중요한 점은 tree 객체가 프로젝트 내의 모든 파일들을 저장하고 있으며, 각 파일에 있어서도 diff 가 아닌 전체 파일을 저장하고 있다는 점이다.

이것이 의미하는 바는, 각각의 커밋들이 전체 프로젝트에 대한 snapshot 을 저장하고 있다는 것이다*.

*기술적으로는, 변경이 이루어진 파일들만 실제 저장이 되기는 한다. 그러나 이는 효율성을 위한 구현상의 세부적 내용일 뿐이다. 설계적인 측면에 있어서는, 하나의 커밋은 프로젝트에 대한 완전한 사본을 저장하고 있다고 간주하여야 할 것이다.

부모 (Parent)

부모 (parent) 부분에는 또다른 commit 객체에 대한 해시값이 저장되며, 이는 "이전 commit" 을 가리키는 "부모에 대한 pointer" 로 간주할 수 있다. 이는 암묵적으로 커밋 그래프 (commit graph) 라고 알려진 커밋들의 그래프를 형성하게 된다. 구체적으로 말하면, 이는 하나의 유향 비순환 그래프 (directed acyclic graph) (혹은 DAG) 이다.

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

'번역 > Git Notes for Professionals' 카테고리의 다른 글

30.8: 새로운 commit 객체 생성  (0) 2020.01.23
30.6: Tree 객체란?  (0) 2020.01.23
30.4: Ref 란?  (0) 2020.01.22
30.3: HEAD ref 란?  (0) 2020.01.22
30.2: Object 란?  (0) 2020.01.22

+ Recent posts