SlideShare a Scribd company logo
1 of 71
Download to read offline
GIT INTERNAL
                     부제: Git 만드는 법




12년	 8월	 23일	 목요일
기본 - GIT 저장소 읽고 쓰기
                    커밋하고 커밋한 것 읽기




12년	 8월	 23일	 목요일
GIT STORAGE


   • Git      저장소 = Git Object 저장소

   • Git      Object = Key-Value pair

       • Value       = Blob(파일), Tree(디렉토리), Commit, Tag

       • Key        = Value에 대한 160bit SHA-1 hash값 (이하 sha1sum)



12년	 8월	 23일	 목요일
GIT STORAGE 만드는 법


   •        mkdir -p .git/objects

   •        mkdir -p .git/refs

   •        echo 'ref: refs/heads/master' > .git/HEAD




12년	 8월	 23일	 목요일
GIT OBJECTS


   • Blob           (파일)

   • Tree           (디렉토리)

   • Commit           (저자정보, 날짜, 커미터 정보, 커밋 메시지 등)

   • Tag




12년	 8월	 23일	 목요일
BLOB



      “blob” <SP> content-length <NUL> content




12년	 8월	 23일	 목요일
BLOB의 예



                    blob
 17welcome
 to
 n4wiki




12년	 8월	 23일	 목요일
TREE



      tree SP content-length NUL

      1*((100644|”40000”) SP name NUL sha1sum-bin)




12년	 8월	 23일	 목요일
TREE의 예



          100644
 blob
 8e8d68219f81ce69ecb502e43539754770ff0176
    DeveloperGuide.md
          040000
 tree
 78ee1e687641a9d3aa6afaf6c82fb86fab744a4d
    api
          100644
 blob
 34b3f62387daf615948ecaf62d3cdee263df6a20
    i18n.md
          040000
 tree
 dbad3d4da10843b1d666feffa58b0319a8a346b3
    spec
          040000
 tree
 17bbf90ac4d32f861227f93eed9dea7c48c279ad
    zz.emberjs




12년	 8월	 23일	 목요일
TREE의 예



          tree
 178100644
 DeveloperGuide.md??h!???i??59uGp?v40000
 apix?hvA?
          Ӫj???/?o?tJM100644
 i18n.md4??#???????-??c?j
 40000
 spec듣
                                                                                                                                                                    =MC??f??????F?
          40000
 zz.emberjs??
          ??/?'???|H?y?




12년	 8월	 23일	 목요일
COMMIT
      commit SP content-length NUL

      tree SP sha-1 NEWLINE

      parent SP sha-1 NEWLINE

      author SP name SP  mail  SP unixtime SP
      timezone-offset NEWLINE

      committer SP name SP  mail  SP unixtime
      SP timezone-offset NEWLINE

      NEWLINE message
12년	 8월	 23일	 목요일
COMMIT의 예



                    commit
 252tree
 1d0a84f977f13ae6f1b398e0224d40f181725233
                    parent
 a71a8e9cb41ada4ced77c35ec8f2eaa45c64f729
                    author
 Yi
 EungJun
 semtlenori@gmail.com
 1345526494
 +0900
                    committer
 Yi
 EungJun
 semtlenori@gmail.com
 1345526494
 +0900

                    test:
 Fix
 the
 test
 for
 getTreeHead().




12년	 8월	 23일	 목요일
GIT OBJECT 저장하는 법


   • 내용의            sha1sum을 계산

   • 내용을            deflate로 압축

   • sha1sum을 이름으로 해서 .git/objects/sha1sum앞2자/
      sha1sum나머지38자 파일로 저장



12년	 8월	 23일	 목요일
LIVE CODING
                    https://github.com/npcode/git-internal-demo




12년	 8월	 23일	 목요일
REFS


   • .git/HEAD: 현재   브랜치를 가리킴

   • .git/refs/heads/*: 로컬   저장소의 브랜치들

   • .git/refs/remotes/*: 원격   저장소의 브랜치들




12년	 8월	 23일	 목요일
커밋하는 법

   • 커밋할             파일들을 blob으로 저장

   • 디렉토리를             tree로 저장

   • 루트  디렉토리의 sha1sum, 저자 정보, 커밋 메시지 등을
      담은 commit을 저장

   • 현재             브랜치 갱신


12년	 8월	 23일	 목요일
12년	 8월	 23일	 목요일
Hello, World!


12년	 8월	 23일	 목요일
8ab68
                    (greet)

12년	 8월	 23일	 목요일
100644 greet 8ab68


                          8ab68
                          (greet)

12년	 8월	 23일	 목요일
100644 greet 8ab68


                          8ab68
                          (greet)

12년	 8월	 23일	 목요일
c97aa



                    8ab68
                    (greet)

12년	 8월	 23일	 목요일
tree c97aa
                    author Yi
                    committer Yi

                    the first commit!



                         c97aa



                         8ab68
                         (greet)

12년	 8월	 23일	 목요일
tree c97aa
                    author Yi
                    committer Yi

                    the first commit!



                         c97aa



                         8ab68
                         (greet)

12년	 8월	 23일	 목요일
15c68




                    c97aa



                    8ab68
                    (greet)

12년	 8월	 23일	 목요일
HEAD
 refs/heads/master


                     15c68




                     c97aa



                     8ab68
                     (greet)

12년	 8월	 23일	 목요일
HEAD
 refs/heads/master


                     15c68




                     c97aa



                     8ab68
                     (greet)

12년	 8월	 23일	 목요일
HEAD
 refs/heads/master


                     15c68




                     c97aa



                     8ab68     Bye, World!
                     (greet)

12년	 8월	 23일	 목요일

More Related Content

More from NAVER D2

[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 
[231] Clova 화자인식
[231] Clova 화자인식[231] Clova 화자인식
[231] Clova 화자인식NAVER D2
 

More from NAVER D2 (20)

[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 
[231] Clova 화자인식
[231] Clova 화자인식[231] Clova 화자인식
[231] Clova 화자인식
 

[Hello world]git internal