⏹ Git
버전관리
- 소스 데이터 + History
- 협업, 작업추적, 복구 등이 가능
버전관리 시스템
- CMS (configuration Management System)
- VCS (Version Control Systems)
버전관리 시스템 종류
- CVCS (Centralized Version Control Systems)
- CVS, SVN 등
- 협업이 가능해짐
- commit하는 순간 배포되어 다수에게 버그유발 가능
- 인터넷 연결 필요
- 자신만의 version history 가질 수 없음
- DVCS (Distributed Version Control Systems)
- Mercurial, Git 등
- commit하더라도 개인 저장소 내에 적용 (다른 개발자에게 영향 없음)
- 원하는 순간 push(배포) 가능
- 오프라인 작업 가능
- 자신만의 version history 가짐
Git
: SVN보다 빠른 속도와 다양한 기능 지원, 대부분의 기업에서 SVN 혹은 Git 사용 중
Github
: Git을 호스팅해주는 웹서비스, 협업을 위한 기능 제공 ( 소스코드 보안이 중요한 경우 사용 기피)
⏹ Git Global Configuration
: 컴퓨터 내 사용할 git의 global 설정값 (기본설정)
git config --global user.name <username>
git config --global user.email <email>
💡윈도우 사용자는 CRLF를 LF로 변경해주어야 한다. (line ending때문)
git config --global core.autocrlf true
editor 설정 (기본적으로 vim)
git config --global core.editor <editor>
전체 설정 확인
git config --list
항목별 설정 확인
git config <key>
⏹ Git 기본용어
Repository
- 프로젝트 단위로 생성
- 소스코드가 저장되어 있는 여러개의 branch가 모여있는 디스크상의 물리적 공간
- Local Repository와 Remote Repository 로 구분
Checkout
- 특정 시점이나 branch의 소스코드로 이동하는 것을 의미
- checkout대상 - Branch, Commit, Tag
- checkout을 통해 과거 여러시점의 코드로 이동 가능
Stage
- 작업할 내용이 올라가는 임시저장 영역
- stage 이용하여 작업한 내용 중 commit에 반영할 파일만 선별하여 commit 수행 가능
Commit
- 작업할 내용을 local repository에 저장하는 과정
- 각각 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남김
Tag
- 임의의 commit위치에 쉽게 찾아갈 수 있도록 붙인 이정표
- Tag가 붙은 commit은 commit id (version)대신 tag name으로 쉽게 checkout 가능
Push
- Local Repository 내용 중, Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정
- 권장 : Push하는 순간 다른 개발자들도 영향을 받기 때문에 검증되지 않은 코드는 push하지 않도록 주의
Pull
- Remote Repository에 있는 내용 중, Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
- 다른 팀원이 변경하고 push한 내용을 Local Repository에 가져올 수 있음.
- Push과정에서 충돌이 일어나 push가 거절된 경우, pull을 통해 remote repository 변경내용을 local repository에 반영하여 충돌 해결한 후에 다시 push 시도해야 함.
Branch
- 특정 시점 (commit단위)에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것.
- 개발의 주축이 되는 branch를 master branch(=main branch)
- 모든 branch는 최종적으로 다시 master branch에 병합(merge)되는 형식으로 진행
Merge
- branch와 반대 개념으로 하나의 branch를 다른 branch와 합치는 과정
- Merge되는 두 branch는 주종관계가 성립 (ex) dev branch를 main branch에 merge)
- Merge되는 과정에서 충돌 발생하는 경우, Diff를 수정하여 해결한 뒤 merge 진행할 수 있음.