Git 개념
버전관리(형상관리) 시스템 중 하나로, 여러 사용자 간의 분산 작업을 가능케하는 분산형 관리 시스템이다.
협업, 작업추적, 복구 등이 가능하며 Source Data와 히스토리도 확인할 수 있다.
🔎 데이터 저장 방식
-
Local Version Control Systems : 버전을 주기적으로 생성하는 것
내 컴퓨터에서 버전 관리 가능하나, 내 컴퓨터가 고장나면 전체 코드가 사라진다.
버전 관리는 되지만 협업은 어려움
-
Centralized Version Control Systems : 중앙 서버에서 관리
협업이 가능하나 다수와 연결되어있어 배포하는 순간 버그 유발 가능하다.
인터넷이 안되면 작업이 불가능하고 개인 version history를 가질 수 없다.
-
Distributed Version Control Systems
배포하더라도 개인 저장소내에 적용되어 다른 개발자에게 영향이 없다.
원하는 순간에 배포가 가능하고, 오프라인에서도 작업이 가능하다.
내 version history를 가질 수 있다.
이 중 git은 DVCS의 하나
SVN : 중앙 서버에 저장
Git : 여러 개발pc와 저장소에 분산 저장 (사본은 로컬에서 관리)
Github
: git을 호스팅해주는 웹 서비스, 협업을 위한 기능
Git 사용하기
git config --global user.name <username>
git config --global user.email <email>
#가져올 때 LF를 CRLF로 변경하고 보낼 때 CRLF를 LF로 변경
%git config --global core.autocrlf true
git config --global core.editor <editor>
git config --list
#항목별 설정 확인
git config <key>
기본 용어
✏️ Repository
- 소스코드가 저정된 여러 Branch가 모여있는 디스크 상의 물리적 공간
- Local Repository와 Remote Repository 로 구분
✏️ Checkout
- 특정 시점이나 branch의 소스코드로 이동하는 것을 의미
- 대상 : branch, commit, tag
- checkout을 통해 과거 여러 시점의 코드로 이동 가능
✏️ 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 이후 다른 개발자도 영향을 받음
✏️ Pull
- Remote Repository 내용 중 Local Repository에 반영되지 않은 commit을 Local Repository로 가져오는 과정
- push 과정에서 conflict 충돌이 일어가서 push가 거절된 경우, pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영하여 conflict를 해결한 뒤 다시 push를 시도한다.
✏️ Branch
- 특정 시점에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
- 개발의 주축인 branch를 master branch/main branch
- 최종적으로 모든 branch는 다시 master branch에 병합되는 방식으로 진행
✏️ Merge
- branch의 반대개념으로 하나의 branch가 다른 branch에 합치는 과정
- merge 되는 두 branch는 주종관계가 성립하고 충돌이 발생하는 경우 diff를 수정하여 충돌을 해결한 뒤 merge를 진행할 수 있다.