-
Ch11. How Does Git Actually Work?Ray Wenderlich/Mastering Git 2021. 8. 23. 00:57
Git은 SHA-1해쉬 값으로 모든 Commit을 참조한다.
Dissecting the commit
git log -5 --oneline f8098fa (HEAD -> master, origin/master, origin/HEAD) Merge branch 'clickbait' with changes from crispy8888/clickbait d83ab2b (crispy8888/clickbait, clickbait) Ticked off the last item added 5415c13 More clickbait ideas fed347d (from-crispy8888) Merge branch 'master' of https://www.github.com/belangerc/ideas ace7251 Adding debugging book idea
d83ab2b commit을 살펴보자.
우선 이 hash의 long value를 얻어보자.
git rev-parse d83ab2b d83ab2b104e4addd03947ed3b1ca57b2e68dfc85
The inner workings of Git
cd .git info/ objects/ hooks/ logs/ refs/
objects 디렉터리에는 object가 들어있다.
- Commits: Commit의 metadata. Parent Commit과 이 Commit에 있는 파일에 대한 정보를 알고 있다.
- Trees: Commit에 포함된 모든 파일의 리스트를 알고 있는 Object
- Blobs: Tree안에 포함되어 있는 파일의 압축버전
cd objects ls 02 14 39 55 6e 84 ad c5 db f8 ...
우리가 살펴보기로한 Commit의 hash는 d83ab2b104e4addd03947ed3b1ca57b2e68dfc85였다.
앞의 2글자 d8디렉터리에 들어가보자
그러면 앞의 2글자를 제외한 이름의 파일이 하나 있다.
cd d8 ls 3ab2b104e4addd03947ed3b1ca57b2e68dfc85
cat 3ab2b104e4addd03947ed3b1ca57b2e68dfc85 xu?Ko?0??̯?51??Ԯ yB ??f?y?cBɯo?{ݝ?|ҌFL?:?@??_?0Td5?D2Br?D$??f?B??b?5W?HÁ?H*?&??(fbꒉ
Viewing Git objects
git cat-file -p d83ab2b tree 63bc5332960d282331f2f80d7205c623cfe6ba83 parent c47084959448d2e0b6877832b6bd3ae70f70b187 parent fbe86a2169278ec62e3bbb3dce1c7f6fe4820d60 author cho.seonghyun <cpromise1@naver.com> 1628506709 +0900 committer cho.seonghyun <cpromise1@naver.com> 1628506709 +0900 Merge remote-tracking branch 'crispy8888/clickbait' into clickbait
The tree object
Tree object는 다른 object들을 가리키는 포인터들의 집합이다.
제일 상단에 있는 tree object(63bc5332960d282331f2f80d7205c623cfe6ba83)를 살펴보자.
git cat-file -p 63bc5332960d282331f2f80d7205c623cfe6ba83 100644 blob 8b23445f4a55ae5f9e38055dec94b27ef2b14150 LICENSE 100644 blob f5c651739ff232f6226d686724f3c9618dd9f840 README.md 040000 tree d27f2eb006fff5b83fdc5d6639c7cfabdcf9fc37 articles 040000 tree 0b2d0890591a57393dc40e2155bff8901acafbb6 books 040000 tree 028f2d5e0a0f99902638039794149dfa0126bede videos
The blob object
위 예제의 제일 상단에 있는 LICENSE파일을 살펴보자.
git cat-file -p 8b23445f4a55ae5f9e38055dec94b27ef2b14150 MIT License Copyright (c) 2019 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell... <snip>
3번째에 있는 articles 디렉터리에는 또 어떤것들이 있는지 살펴보자.
git cat-file -p d27f2eb006fff5b83fdc5d6639c7cfabdcf9fc37 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 .keep 100644 blob f8a69b62146eceef1b9078fed8788fbb6089f14f clickbait_ideas.md 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ios_article_ideas.md
'Ray Wenderlich > Mastering Git' 카테고리의 다른 글
Ch13. Stashes (0) 2021.09.21 Ch12. Merge Conflicts (0) 2021.08.23 Ch10. Merging (0) 2021.08.21 Ch9. Creating a Repository (0) 2021.08.21 Ch8. Syncing With a Remote (0) 2021.08.21