git 이란, 버전관리 시스템의 한 종류
버전관리 시스템 (형상 관리)
- congifuration Management Systems
- Cersion Control Systems
- Source Data(예 .py) + History
- 협업, 작업 추적, 복구 등이 가능
아-주 오래전부터 필요성이 대두되어왔음
혼자 또는 협업 해야할 경우 버전관리가 안되어오면 작업하기 너무 어려웠음
이제는 없으면 협업하기 힘든정도임
아주 오래전..
그래서 파일의 버전을 관리하고..
local version control systems
역시 이것도 부족해
그러면 중앙에서 관리해보자
중앙에 버전 파일들을 두고
가져가서 작업해 그리고 작업하는 동안 버전은 계속 업데이트되어서 중앙에 보내질거야
Centrallized Version Control Systems
그래서 개발이 된
중앙에서 관리해오지만 전체를 카피해와서 내컴퓨터에서 버전관리를 하고,
올릴 준비가 되었으면 올려서 업데이팅
Distributed Version Control Systems
중앙관리형(CVCS) : CVS, SVN, etc..
분산관리형(DVCS) : Mercurial, Git, etc...
CVS
SVN
Git
github
gitlab
소스 코드가 저장되어있는 여러개의 branch가 모여있는 디스크상의 물리적 공간
local repository와 remote repository로 구분
주로 프로젝트 단위로 구성됨👩💻👨💻
폴더와는 조금 다름
특정 시점이나 branch의 소스코드로 이동하는 것을 의미
checkout 대상 - Branch, commit, tag
checkout을 통해 과거 여러 시점의 코드로 이동 가능
작업할 내용이 올라가는 임시저장영역
이 영역을 이용하여 작업한 내용 중 commit에 반영할 파일만 선별하여 commit을 수행 할 수 있음
작업할 내용을 local repository에 저장하는 과정
버전을 올리는 것과 같음
각각의 commit은 의미있는 변경단위, 변경에 대한 설명을 commit log로 남김
메세지에 변경에 대한 내용을 담아야함. 의미있음
권장 : commit을 아끼지 말기 (아끼똥, save point)
참고 : commit 단위나 commit log format을 정해놓은 회사나 팀 도 있음 (빌드 서버를 사용하는 경우)
임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
tag가 붙은 commit은 commit id(version)대신 tag name으로 쉽게 checkout가능
local repository의 내용 중 remote repository에 반영되지 않은 commit을 remote로 보내는 과정
권장 : push하는 순간 다른 개발자 들도 영항을 받음. 검증되지 않은 코드는 push하지 않도록 함.
remte에 있는 내용 중 local에 반영되지 않는 내용을 가져와서 local에 저장하는 과정
다른 팀원이 변경하고 push한 내용을 local로 가져옴
참고 : push 중 conflict(충돌)이 일어나서 push가 거절된 경우, pull을 통해 remote의 변경내용을 local에 반영하여 conflict를 해결한 뒤 다시 push해야함
특정 시점(commit단위)에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
개발의 주축이 되는 branch를 master branch 혹은 main branch라고 함
모든 barnch는 최종적으로 다시 master branch에 merge 가능
barnch의 반대 개념으로 하나의 branch를 다른 branch와 합치는 과정
merge 되는 두 branch는 주종 관계가 성립. 예)dev branch를 main branch에 merge
merge 되는 과정에서 conflict가 발생할 경우 diff를 수정하여 conflict를 해결한뒤 merge를 진행할 수 있음
working directory 작업 공간 : 아직은 git이 관리하는 영역은 아님 그러나 git명령어로 add 하는 순간 stage로 올라감. 버전 관리가 안됨
index(stage) stage area : 역시나 버전관리는 안되지만 여기서 commit하는 순간 버전이 매겨짐
git init
폴더에서 git을 초기화하는 명령어로, 사용하면 해당 폴더를 git이 관리하기 시작
git status
git에 존재하는 파일 확인
master 브랜치에 있고
commit은 없어
워킹디렉토리에는 있는데 stage에 add되지 않은 파일은 있어 그건 test.txt파일이야
git add <filename>
working directory에서 변경된 파일을 index stage에 추가
commit 가능한 파일이 있어 그건 test.txt파일이야
git commit -m 'commit에 대한 설명' <filename>
깃허브 에서 생성
git remote add origin https://<username>:<toeken>@github.com/<remote repository>.git
git remote -v
local head에 반영된 변경된 내용을 remotre에도 반영하기 위해서는 push 해야함
git push origin <branchname>
remote에만 있고 local에는 없는 상황
local에도 가져오는 pull 하기
git pull origin <branchname>