소스코드가 저장되어 있는 여러개의 branch들이 모여 있는 디스크상의 물리적 공간
Local Repository와 Remote Repository로 구분
작업을 시작할 때 Remote Repository에서 소스코드를 복사하여 가져오고(Clone), 이후 소스코드를 변경한 다음 commit을 한다.
이때 commit을 한 소스는 Local Repository에 저장되고 Push를 하기 전에는 Remote Repository에 반영되지 않는다.
특정 시점이나 브랜치의 소스코드로 이동하는 것을 의미한다.
checkout의 대상은 branch, commit, tag 등이 있다.
checkout을 통해 과거 여러 시점의 코드로 이동이 가능하다.
작업한 내용이 올라가는 임시저장영역 이다.
이 영역을 이용하여 작업한 내용중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있다.
작업한 내용을 Local Repository에 저장하는 과정
각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남긴다.
commit은 자주자주 해주는 것이 좋다.
임의의 commit위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
tag가 붙여진 commit은 commit id 대신 tag name으로 쉽게 checkout이 가능하다.
Local Repository의 내용 중 Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정
push하는 순간 다른 팀원들도 영향을 받으므로 검증되지 않은 코드는 push하지 않는 것이 좋다.
Remote Repository에 있는 내용 중, Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
다른 팀원이 변경하고 push한 내용을 Local Repository에 가져올 수 있다.
push과정에서 conflict(충돌)이 일어나서 push가 거절된 경우, pull을 통해 Remote Repository의 변경내용을 반영 한 뒤 다시 push를 시도해야 한다.
특정 시점 (commit 단위)에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
개발의 주축이 되는 branch를 Master branch라고 한다.
모든 branch는 최종적으로 다시 Master branch에서 Merge(병합)되는 형식으로 진행된다.
Remote Repository를 Local Repository에 복제한 뒤 새로운 Remote Repository로 push하는 과정을 fork라고 한다.
권한은 없지만 작업에 기여하고 싶거나 카피하여 작업을 하고 싶을 때 fork를 사용 한다.
작업내용을 원본 Repository에 반영하기 위해서는 pull request를 통한 승인과정이 필요하다.
branch의 반대개념으로, 하나의 branch를 다른 branch와 합치는 과정이다.
merge되는 두 branch는 주종관계가 성립한다. 예를들어 develop branch를 master branch에 merge
merge 과정에서 conflict가 발생할 경우 diff tool 혹은 merge tool을 사용하여 conflict를 해결한 뒤 merge를 진행한다.