ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.