Git 사용 준비
1. GitHub 가입
2. Git Global Configuration
Global Username & Email
git config --global user.name <username>
git config --global user.email <email>
CRLF - Windows
- 가져올 때는 LF를 CRLF로 변경하고 보낼때는 CRLF를 LF로 변경
git config --global cire.autocrlf true
참고 - Line ending
- Windows : CR (\r) + LF (\n)
- Unix or Mac : LF (\n)
- Windows 사용자와 Mac 사용자가 같은 Git Repository 를 작업할 때, 코드에서 변경된 내용이 없어도 CRLF 차이로 인해 commit이 발생할 수 있음
Editor
git config --global core.editor vim
전체 설정 확인
git config --list
항목별 설정 확인
git config user.name
git config user.email
3. Git 기본 용어
(1) Repository
- 소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크상의 물리적 공간
- Local Repository와 Remote Repository로 구분
(2) Checkout
- 특정 시점이나 Branch의 소스코드로 이동하는 것을 의미
- Checkout 대상 - Branch, Commit, Tag
- Checkout을 통해 과거 여러 시점의 코드로 이동이 가능
(3) Stage
- 작업할 내용이 올라가는 임시저장영역
- 이 영역을 이용하여 작업한 내용중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음
(4) Commit
- 작업할 내용을 Local Repository에 저장하는 과정
- 각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남김
- 권장 - commit을 아끼지 마세요. (게임의 save point, 아끼면 똥됩니다.)
- 참고 - commit 단위나 commit log format을 정해놓은 회사나 팀도 있음 (빌드 서버를 사용하는 경우)
(5) Tag
- 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
- Tag 가 붙은 commit은 commit id (version) 대신 tag name으로 쉽게 checkout 가능
(6) Push
- Local Repository의 내용 중, Remote Repository에 반영되지 않은 commit을
Remote Repository 로 보내는 과정
- 권장 - Push 하는 순간 다른 개발자들도 영향을 받음. 검증되지 않은 코드는 Push 하지 않도록 함.
(7) Pull
- Remote Repository 에 있는 내용 중, Local Repository에 반영되지 않은 내용을 가져와서
Local Repository에 저장하는 과정
- 다른 팀원이 변경하고 Push한 내용을 Local Repository에 가져올 수 있음
- 참고 - Push 과정에서 Conflict (충돌)이 일어나서 Push가 거절된 경우, Pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영하여 Conflict를 해결 한뒤 다시 Push 를 시도해야 함.
(8) Branch
- 특정 시점 (commit 단위)에서 분기하여 새로운 commit을 쌓을수 있는 가지를 만드는 것
- 개발의 주축이 되는 branch를 master branch (혹은 main branch) 라고 함
- 모든 branch는 최종적으로 다시 master branch 에 merge(병합)되는 형식으로 진행 됨
(9) Merge
- Branch 의 반대개념으로 하나의 Branch를 다른 Branch와 합치는 과정
- Merge 되는 두 Branch 는 주종관계가 성립. 예 - dev branch를 main branch에 merge
- Merge 되는 과정에서 Confict (충돌)이 발생하는 경우 Diff를 수정하여 Conflict를 해결한 뒤 Merge를 진행할 수 있음