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 |
댓글