Source Data + History
협업, 작업추적, 복구 등이 가능
< Local Version Control Systems >
내 컴퓨터에서 버전 관리 가능 but 하드가 날아가면 전체 코드 사라짐
버전은 관리 가능 but 협업 어려움
< Centralized Version Contro Systems >
협업 가능 but commit 하는 순간 배포되어 다수에게 유발 가능
인터넷이 안되면 작업 불가
자신만의 version history를 가질 수 없음
< Distributed Version Control Systems >
commit 하더라도 개인저장소 내에 적용됨 ( 다른 개발자에게 영향 없음 )
원하는 순간에 배포 ( PUSh ) 가능
오프라인에서도 작업 가능
자신만의 version histroy를 가질 수 있음
CVCS : CVS , SVN , ...
DVCS : Mercurial, Git , ...
< Repository >
소스코드가 저장되어 있는 여러 개의 Branch가 모여 있는 디스크상의 물리적 공간
Local Repository 와 Remote Repository로 구분
특정 시점이나 Branch의 소스코드로 이동하는 것을 의미
Checkout 대상 : branch, commit, tag
Checkout 을 통해 과거 여러 시점의 코드로 이동이 가능
작업할 내용이 올라가는 임시저장영역
이 영역을 이용하여 작업한 내용 중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음
작업할 내용을 Local Repository 에 저장하는 과정
각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log 로 남김
임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
Tag 가 붙은 commit은 commit id (version) 대신 tag name 으로 쉽게 checkout 가능
< Pull >
Remote Repository 에 있는 내용 중, Local Repository 에 반영되지 않은 내용을 가져와서 Local Repository 에 저장하는 과정
다른 팀원이 변경하고 Push한 내용을 Local Repository에 가져올 수 있음
< Conflict > 발생하는 경우, Pull을 통해 remote repository 의 변경 내용을 local repository 에 반영하여 conflict를 해결하고 다시 push 시도
특정 시점 ( commit 단위 ) 에서 분기하여 새로운 commit 을 쌓을 수 있는 가지를 만드는 것
개발의 주축이 되는 branch 를 master branch ( 혹은 main branch ) 라고 함
모든 branch 는 최종적으로 다시 master branch 에 merge 되는 형식으로 진행됨
Branch 의 반대 개념으로 하나의 Branch 를 다른 Branch 와 합치는 과정
Merge 되는 두 Branch는 주종관계가 성립
< Conflict > 발생하는 경우, Diff를 수정하여 Conflict 해결한 뒤 Merge 진행할 수 있음
Git 이 관리하는 3가지 단계로 구성
< Working Directory > - 작업공간
< Index ( Stage ) > - add 한 파일들 존재
< HEAD > - 최종 확정본 - commit 한 파일들 존재
git init
git add file_name
git commit -m "commit에 대한 설명" file_name
git remote add origin https://github.com/<repository>.git
git remote add origin https://<username>:<token>@github.com/<repository>.git
git remote -v
Local Repository (HEAD) 에 반영된 변경내용을 Remote Repository 에도 반영하기 위해서는 Git Push 를 사용
git push origin <branchname>
Remote Repository 의 내용에 맞춰 Local Repository 를 갱신하려면 Git Pull 사용
git pull origin <branchname>
git clone https://github.com/<repository>.git