WHY?
Version Control System
- "특정 시점의 파일들의 상태를 저장하고, 필요에 따라 과거 특정 시점의 버전을 관리하는 시스템"
일단 가장 핫하다!!
네이버의 경우 무조건 git 을 쓴다. CTO 가 강제로 git을 쓰도록 하였고, 안 쓰는 팀을 조사하여 쓰도록 강요함.
git 이 왜 핫해졌을까요??
"역사를 잊은 민족에게는 미래가 없다."
Local Version Control Sysem ( 기존 )
: 간단한 데이터베이스에 파일의 변경 사항을 기록, 데이터의 차이점들을 특별한 형식의 파일에 저장
Centralised Version Control System
: 중앙서버를 하나 두고 코드를 관리 ( 중앙서버 형식이라 온라인이 아니면 코드 관리 불가능, 서버가 다운되거나 파손될 경우 버전 컨트롤 시스템을 쓸수가 없다. )
Distribution Version Control System
: 다수의 원격 저장소, 다양한 workflow 사용가능, version 저장을 내 로컬에 일단 하고 내가 원하는 시점에 원격 저장소에 변경
: 강사님 왈... "최대의 단점은... 어디서든 일할 수 있는 환경이 되버렸다는 것이다" ㅋㅋㅋㅋㅋㅋㅋ
GIT 탄생 배경
Linus Torvalds 개발
2005년
리눅스 커널을 개발하던 개발자
Design goal - fast, simple, distribution, small size
기존의 SVN 의 경우 DELTA ( 두 버전을 비교했을 때 두 버전간의 파일 차이만을 기록하여 묶는 것을 DELTA 라 한다 )
처음의 경우 DELTA 가 없으니 파일을 전체를 저장한다 ( = SNAPSHOT 을 저장한다 )
Ver2 의 경우 Ver1 과 비교하여 DELTA 를 저장
... Ver 5 에서 Ver 3 으로 돌아가는 경우 2개의 DELTA 를 통해 Ver 3로 돌아간다.
그러나 git 은 revision 을 통으로 저장해놓는다. ( 즉, 계산할 필요가 없다!! )
가장 마지막 revision 을 snapshot 으로 통으로 저장하고, 그 전 버전들을 DELTA 로 관리한다.
=> 사람이 돌아가는 시점은 가장 최근의 경우가 많다! 라는 가정에서 시작한 fast, small 디자인에 입각한, git 의 DELTA 관리 기법이다.
근데 용량 문제가 있지 않나..??
1MB 짜리를 100번 커밋하면 100MB 인데??
그래서 small design goal 을 위해 DELTA 를 도입!
+ Snapshot 저장시 변경되지 않은 파일은 Link 를 통해서만 관리 (즉, 계속 재 생성하지는 않음 ) ( 그래서 git 은 content-addressable filesystem 이다. )
그런데 이게 SVN 보다 빠르다는 걸 어떻게 보장해??
그것은 "Everything is local and offline" 모든 버전 관리 관련된 연산은 Local PC 에서 한다는 강점이 있다.
Git 의 무결성 관리
Git 은 파일이름을 저장하지 않고 해당 파일의 해시로 저장
SHA-1 해시를 사용한 체크섬( 40자 길이의 16진수 문자열 )
처음 2글자는 directory name 으로 사용됨
Powerful Commands
평소 자주 사용하는 명령어..
add, commit, push branch, checkout, merge, rebase, fetch, pull, reset, stash, tag, status, cherry-pick, log, diff, bisect, blame...
'Git' 카테고리의 다른 글
5. Git Remote (0) | 2016.10.18 |
---|---|
4. git branch 이해하기! (0) | 2016.10.17 |
[부록] git alias (0) | 2016.10.17 |
2. git add, commit, status 명령어 (0) | 2016.10.17 |
1. Git Init ( Git 시작 설정하기 ) (0) | 2016.10.17 |