git: 로컬 저장소에 소스 코드를 형상 관리하기 위한 툴
Working Directory: 내 컴퓨터에 있는 프로젝트 directory에 git 초기화(Initialize, init)를 해주면 git이 내 프로젝트를 관리할 수 있게 된다. git이 관리할 수 있는, 현재 작업이 이루어지는 프로젝트 directory가 working directory이다.
Staging Area: Working Directory에서 변동사항을 추적할 후보, 즉 내 git 저장소에 반영하고 싶은 후보로 선정된 파일을 올리는 공간이다. Working Directory에서 add 하면 Staging Area에 올라간다.
Local Repository: Staging Area에 올려진 추적 대상 파일을 commit하면 Local Repository(로컬 저장소)에 반영된다. commit 당시 프로젝트 상태 그대로 스냅샷을 찍어 Local Repository에 저장한다.
github: 원격 환경에서 소스 코드를 저장할 수 있도록 원격 저장소를 제공하는 서비스(like 구글 드라이브)
- 로컬 저장소의 내용을 push하면 github이 제공하는 remote repository(원격 저장소)에 저장된다.
- 인터넷으로 연결되어 있는 프로젝트 저장소 + 개발자 커뮤니티
Git 사용목적
- 버전 관리
- 하나의 파일로 버전 관리가 가능하다.
- commit 단위로 변동사항에 대한 스냅샷을 갖고 있기 때문에 히스토리 관리에 용이하다.
- 누가, 언제, 현재 프로젝트의 내용이 어떤지 정보를 남긴다. → 커밋 메시지 반드시 작성 필요
- 작업단위 세분화
- 특정 기능을 완성하고 반영 사항을 commit하면, 반영 전후로 서비스 동작에 어떤 영향을 끼치는지 확인할 수 있다.
- 기능 완성할 때마다 commit을 하면, 어느 부분에서 에러가 났는지 쉽게 파악할 수 있고 원상 복구도 쉽게 할 수 있다.
- 협업 유용
- 동일한 프로젝트에 대해 개별 개발자가 본인 브랜치에서 개발하고, 나중에 하나로 합칠 때 충돌하는 지점을 탐지할 수 있다.
- 같은 파일명의 내용이 어떤 부분이 다른지 자동으로 비교해주기 때문에 충돌하는 지점만 수정하고 합치는 작업을 이어 진행하면 된다.
- Git이 이전 commit(이전에 저장한 프로젝트의 상태)을과 현재 commit을 비교하여 자동으로 어떤 부분이 바뀌었는지 알려준다.
- 누가, 언제, 어떤 부분을 수정했는지 한 눈에 파악할 수 있다.
Commit
- 현재 프로젝트 상태를 저장하는 것
- 누가, 언제 commit 했는지, 프로젝트 변경 내용, 작업 내역(commit 메시지)이 포함된다. + commit id(commit 관리를 위해 부여된 유일한 값)
- 여러 파일을 수정했어도 기능별로 관련된 파일만 골라서
add(staging)하고 commit할 수 있다.
Repo(리포, repository)
repo(리포, repository): Git으로 관리되는 프로젝트
로컬 repo(local repository): 내 컴퓨터에 저장되어 있는 리포지토리
원격 repo(remote repository): github처럼 다른 곳에서 접속할 수 있는 공간에 저장되어 있는 리포지토리
추적(Tracking, 트랙킹 / branch tracking): 로컬 repo가 원격 repo를 연결하는 것(특정 브랜치를 연결해준다)
clone : 원격 repo를 가져와서 내 컴퓨터에 초기 repo를 세팅하는 것(초기 다운로드)
Push & Pull
push : 로컬 repo의 commit들을 원격 repo에 반영하는 것
pull : 원격 repo의 commit들을 로컬 repo에 반영하는 것
Branch
branch : 동일한 프로젝트에서 여러 개의 개별적인 환경을 만들어주는 기능
- 브랜치를 통해 동일한 파일을 건드리지 않고도 개발 진행이 가능하다.
- 특정 commit에서 갈라져나와 작업할 수 있다.
- 기능별로 이름을 만들어 브랜치에서 작업한다.
checkout : 작업할 브랜치로 바꾸는 것
- 체크아웃된 브랜치에만 commit이 반영된다.
Merge & Conflict
merge : 브랜치를 다른 브랜치에 합치는 것. 특정 브랜치의 commit들을 다른 브랜치의 commit 내역에 모두 반영하는 것.
conflict : merge하는 과정에서 같은 파일의 동일한 부분이 수정되면 conflict 가 발생한다.
- Git이 충돌 내역을 보여준다.
- 최종적으로 반영할 내역으로 고친 후, commit → merge 하면 된다.