개요
버전관리는 협업 작업추적 복구등의 기능을 말하며 코드를 누가 언제 어떻게 변경했는지에 대해서 추적 및 관리하는 도구이며 변경 사항을 저장 및 되돌리기를 진행 할 수 있다.
목표
버전관리를 이해 및 응용
버전관리의 역사
Local Version Control System
- 내 컴퓨터에서 버전 관리 기능 -> 내 컴퓨터 하드가 날아가면 전체 코드가 사라짐
- 버전관리는 되지만 협업은 어려움이 있다.
Centralized Version Control System
- 협업이 가능 해짐
- commit 하는 순간 배포되어 다수에게 버그 유발 가능(서버로 바로 commit)
- 인터넷이 안되면 작업이 불가능
- 자신만의 version History를 가질 수 없음
Distributed Version Control System
- commit을 하더라도 개인 저장소 내에 적용됨(다른 개발자에게 영향이 없음)
- 원하는 순간에 배포(Push) 가능
- 오프라인에서도 작업 가능
- 자신만의 Version History를 가짐
CVS, SVN, Git
CVS
1980 년대에 사용
commit 오류 발생 시 Rollback 불가능 SVN으로 대체
SVN
2000년 대에 사용되었으며 현재도 사용하는 기업이 있다.
Rollback 가능
Git
현재 많은 기업들이 사용하고 있음
SVN 보다 빠른 속도와 많은 기능을 지원
Git 설치 및 설정
Window에서 설치
홈페이지 : https://git-scm.com/
최신버전으로 설치 파일 실행 전부다 next로 진행
Git Global Configuration
- 최초 설치 시 기본설정을 한다고 생각하면 된다.
사용자 이름 설정
git config --global user.name "Your Name"
commit을 할때 작성자 이름
사용자 이메일 설정
git config --global user.email "your.email@example.com"
커밋에 연락처 정보로 기록
편집기 설정
git config --global core.editor "editor_name"
Git에서 커밋 메시지를 작성할 때 사용
줄 바꿈 설정
git config --global core.autocrlf true
Windows에서 개발을 하고 Linux나 macOS와 같은 Unix 기반 시스템과 협업할 때 줄 바꿈 방식을 자동으로 변환해주는 옵션입니다.
Git에서 사용되는 기본용어 목록
pository
- 소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크상의 물리적 공간
- Local Repository와 Remote Repository로 구분
Checkout
- 특정 시점이나 Branch의 소스코드로 이동하는 것을 의미
- Checkout 대상 -branch, Commit, Tag
- Checkout을 통해 과거 여러 시점의 코드로 이동이 가능
Stage
- 작업할 내용이 올라가는 임시저장영역
- 이 영역을 이용하여 작업한 내용중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음
Commit
- 작업할 내용을 Local Repository에 저장하는 과정
- 각각의 commit은 의미이는 변경단위이고 변경에 대한 설명은 commit log로 남김
- 권장 -commit을 자주 해야해야 한다. 게임 및 엑셀작업할 때 save point
- 참고 -copmmit 단위 나 commit log format을 정해놓은 회사나 팀도 있음
tag
- commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
- Tag가 붙은 commit은 commit id대신 tag name으로 쉽게 checkout 가능
push
-
local repositroy의 내용중, Reomote Repository에 반용되지 않은 commit을 Remote Repository로 보내지는 과정
-
권장 Push하는 순간 다른 개발자들도 영향을 받음 검증되지 않은 코드는 Push하지 않도록 함
pull
- Remote Repository에 이 내용 중 Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
- 다른 팀원이 변경하고 Push한 내용을 Local Repository에 가져올 수 있음
- 참고 -Push 과정에서 conflict이 일어나서 Push가 거정된 경우 Pull을 통해 Remote Repository의 변경 내용을 Local Reposiory에 반영하여 conflict를 해결 한 뒤 다시 Push를 시도해야함
Branch
- 특정 시점 에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
- 개발의 주축이 되는 branch를 master(main) branch라고 한다.
- 모든 branch는 최종적으로 다시 master branch에 merge(병합) 되는 형식으로 진행 됨
Merge
- Branch의 반대개념으로 하나의 Branch를 다른 Branch와 합치는 과정
- Merge 되는 두 Branch는 주종관계가 성립
- Merge 되는 과정에서 conflict가 발생하는 경우 Diff를 수정하여 conflict를 해결한 뒤 Merge를 진행 할 수 있음