Structure - Internal

    Structure - Internal

     

     

    Git은 단순히 key-value 데이터 저장소 -> Content-addressible 파일 시스템

     

    Tree

    유닉스의 디렉토리

    항목을 여러 개 가질 수 있음

    Blob

    Inode에 대응

    Blob 개체나 하위 Tree를 가리키는 SHA-1 포인터, 파일 모드, 파일 이름, 개체 타입을 가짐

     

    git cat-file -p master^{tree}

    master 브랜치가 가리키는 Tree 개체

     

     

    Commit 개체

    Tree를 가진 Snapshot을 불러내기 위한 SHA-1 값이 저장됨

    누가, 언제, 왜 등의 정보를 가짐

     

    refs

    마지막 커밋의 SHA-1값 포인터를 쉬운 이름으로 사용

    즉 refs/heads/master는 master의 가장 마지막 커밋을 가리킴

    cat .git/HEAD

    ref: refs/heads/master

    즉 HEAD는 현재 branch의 마지막 커밋의 symbolic 레퍼런스

     Tag

    Tag는 Tree 개체가 아니라 Commit 개체를 가리킴

     

    Remote ref

    Remote에 Push하면 각 Branch 마다 Push한 커밋을 refs/remotes 디렉토리에 저장함

     

    git gc

    수정되기 전 파일이 많이 생겼을 때 압축하여 정리함

     

    Refspec

    원격 브랜치와 로컬 레퍼런스의 연결

    origin 저장소의 URL과 Fetcht할 Refspec은 무엇인지 내용 추가

    .git/config 

    [remote "origin"]

       url = ......   .git

       fetch = +refs/heads/*:refs/remotes/origin/*

     

    +는 생략 가능,  <src>:<dest> src는 리모트, dest는 로컬

     

    git log origin/master

    git log remotes/origin/master

    git log refs/remotes/origin/master

    모두 refs/remotes/origin/master로 해석함

    fetch

    만약 master 브랜치만 pull 할 수 있게 하려면

    fetch = +refs/heads/master:refs/remotes/origin/master

    여러 브랜치를 가져올 때는

    git fetch origin master:refs/remotes/origin/master hong:refs/remotes/origin/hong

    push

    git push origin master:refs/heads/qa/master

     

     [remote "origin"]

       url = ......   .git

       fetch = +refs/heads/*:refs/remotes/origin/*

       push = refs/heads/master:refs/heads/qa/master

    git push origin  :hong

    원격의 레퍼런스 삭제

    src가 비워져있으니 dest 비워라는 뜻

     

     

     

    'Git > Theory' 카테고리의 다른 글

    Structure - Directory  (0) 2013.05.07
    Configure  (0) 2013.05.06
    blame  (0) 2013.05.06
    filter-branch  (0) 2013.05.06
    Stash  (0) 2013.05.06

    댓글