Git 개념 이해하기
Contents
Git & Github
Git
분산 버전 관리 도구(DVCS)
- 하나의 중앙 서버가 존재하나, 여러 클라이언트가 각자의 pc저장소에 중앙 서버의 전체 사본을 가지고 작업
- 중앙 서버에서 일부 파트만 가져오는 SVN과 차이를 보인다.
출처) https://git-scm.com/book/ko/v2/시작하기-버전-관리란%3F
-> 소스코드를 효과적으로 관리
Github
- git으로 관리되는 프로젝트를 공유할 수 있는 서비스
- 오픈소스의 경우 무료로 서버 제공
Git 구조
출처) https://sjh836.tistory.com/37
Git 단계
- Workspace(working Directory): 현재 작업중인 git 프로젝트 파일이 존재하는 내 pc 디렉토리
- Index(Staging Area): 커밋할 변경 내역들의 대기 장소
- Local Repository: 커밋들이 스냅삿으로 기록된 곳
- Remote Repository: 원격 서버에서 관리되는 저장소
.git 초기 구성
|
|
git add
- index에 object이름과 실제 파일 이름이 추가, /objects에 blob타입으로 파일 내용이 추가
- 같은 파일이라도 파일 내용이 달라지면 새로운 object가 생성
- 파일 내용이 동일하면 새로운 object가 생성
- object명은 SHA1으로 hasing된다
⇒ Workspace의 변경내역을 Index에 올리는 과정
cf) 옵션
git add <파일/디렉토리 경로>
: 디렉토리의 일부 변경내용만 Index에 추가git add .
: 현재 디렉토리 내 모든 내용 추가git add -A
: 디렉토리의 모든 내용 추가
git commit
- object에 commit 객체와 tree객체가 추가
- tree객체: commit시 index의 스냅샷 기록
- commit객체: tree객체명 + Author + Date + Message 기록
- 2번째 commit부터는 이전 commit객체명을 저장(parent)
Git 객체
- object: blob과 tree정보
- tree: 디렉토리와 blob정보
- blob: 파일 내용
- tag: commit객체를 가리키며 태그명과 만든이, 주석을 포함
Git 명령어
- git status
- Working Directory와 Staging Area의 상태를 확인
- Changes to be committed: index와 blob이 가리키는 객체가 서로 같음(add를 했음)
- Changes not staged for commit: index와 blob이 가리키는 객체가 서로 다름(add를 안함)
- git push
- 로컬에서 commit한 내용을 remote repo에 업로드
- git branch
HEAD
: 현재 브랜치를 가리킴.git/refs/heads/{brach name}
경로에 생성 → 커밋 객체를 가리킴
- git merge
- 현재 브랜치가 가리키는 커밋 객체를 다른 객체와 병합(HEAD 브랜치가 기준)
- git checkout
- branch 변경 → HEAD가 바뀜
Gist?
- Github에서 제공하는 서비스
- git 기반 컨트롤(버전관리)을 가지는 code snippets, log, memo 서비스