본문 바로가기

Git

0. Git 강의


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