28
Git의 Commit과 Branch (그림 그리기에 빗대어..)

Git의 Commit과 Branch

Embed Size (px)

Citation preview

Page 1: Git의 Commit과 Branch

Git의 Commit과 Branch (그림 그리기에 빗대어..)

Page 2: Git의 Commit과 Branch

도화지 사진첩

나는 화가다

그림을 그리는 화가가 있다고 해봅시다.도화지에 그림을 그리고 기록을 위해 사진을 찍어서 사진첩에 보관합니다.(도화지 Working Directory, 사진첩 Repository(저장소))

Page 3: Git의 Commit과 Branch

도화지 사진첩

나는 화가 그림을 그리다

얼굴을 그리는 프로젝트입니다. 일단 얼굴을 그려봅니다.( 눈,코,입 등이 프로젝트에 들어 있는 파일에 해당)

Page 4: Git의 Commit과 Branch

도화지 사진첩

기록을 위해 사진으로 찍어두다 1

기록을 위해 사진을찍고 사진첩에 보관합니다.(사진을 찍어서 보관하는 행위가 Commit)

Page 5: Git의 Commit과 Branch

도화지 사진첩

나는 화가 그림을 그리다 2

눈썹을 더 그려봅니다.

Page 6: Git의 Commit과 Branch

도화지 사진첩

기록을 위해 사진으로 찍어두다 2

또 사진을 찍고 사진첩에 보관합니다.

Page 7: Git의 Commit과 Branch

도화지 사진첩

기록을 위해 사진으로 찍어두다 3

모자를 그리고 사진을 찍고 사진첩에 보관합니다.

Page 8: Git의 Commit과 Branch

도화지 사진첩

찍은 사진의 순서가 필요하다

그런데 사진첩에 사진이 많이 쌓이다 보니 순서가 헷갈립니다. 순서를 표시해둘 필요하겠죠?

Page 9: Git의 Commit과 Branch

순서를 기억하는 가장 쉬운방법? 번호를 지정하자!

Page 10: Git의 Commit과 Branch

도화지 사진첩

1

2

3

사진에 번호를 붙이다

순차적으로 1,2,3 붙입니다.(svn의 리비전 번호가 이런거죠.)번호 장점 : 번호만 봐도 나중에 것이 무엇인지 대략적(?) 파악가능하다번호 단점 : 항상 사진첩에 최근 번호가 무엇인지 확인해야 번호를 매길수 있다.

Page 11: Git의 Commit과 Branch

그런데 왜 Git은 Commit id로 번호가 아닌

Hash를 쓸까?

Page 12: Git의 Commit과 Branch

순차적이지 않기에 서버에 최신 번호 확인 불필요!

오프라인일 때도 Commit id 지정 가능

Page 13: Git의 Commit과 Branch

그럼 Hash는 중복이 안되나요?

Page 14: Git의 Commit과 Branch

그럼 Hash는 중복이 안되나요?SHA1의 중복 발생 수학적 확률 : 2의 80제곱분의 1

Page 15: Git의 Commit과 Branch

그럼 Hash는 중복이 안되나요?SHA1의 중복 발생 수학적 확률 : 2의 80제곱분의 1

🐺그냥 어느 날 동료가 전부 한순간에 늑대에

게 물려 죽을 확률이 훨씬 더 높다. - Pro Git 중에서..

Page 16: Git의 Commit과 Branch

Hash는 중복이 안되나요?SHA1의 중복 발생 수학적 확률 : 2의 80제곱분의 1

“지구에서 약 6.5억 명의 인구가 개발하고 각자 매초 리눅스 커널 히스토리 전체와(100만 개) 맞먹는 개체를 쏟아 내고 바로 Push한다고 가정하자. 이런 상황에서 해시 값의 충돌 날 확률이 50%가 되기까지는 5

년이 걸린다.”

- Pro Git 중에서..

Page 17: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

Hash로 id지정하면 순서는 어떻게 기억하죠?

Hash로 id를 지정하면 순서는 어떻게 알죠?

Page 18: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

나의 Parent가 누구인지 기억해야한다.(포인터)

Page 19: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

모자가 맘에 안들어!

Page 20: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

이전 그림에서 다시 시작하자

체크아웃

Page 21: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

그림을 그리다 4

Page 22: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

?

사진을 찍다 4, 누가 Parent?

G8631

별모자를 쓴 사진을 찍으면 parent가 누구죠?

Page 23: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

두 가지(Branch)로 나뉘었다!

G8631

이렇게 만들어진것이 Branch

Page 24: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

두 가지(Branch)로 나뉘었다!

G8631

평범한 모자를 쓴 그림의 과정 이력

Page 25: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

두 가지(Branch)로 나뉘었다!

G8631

별 모자를 쓴 그림의 과정 이력

Page 26: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

가지에게 의미(뜻)있는 이름을..

G8631

각 Branch를 어떻게 부르면 될까? Hash 하나만 알아도 해당 브랜치를 대표할 수 있다! 해당 Branch의 가장 최신 commit의 id hash값만.그래도 hash로 부르는건 좀 불편하니

Page 27: Git의 Commit과 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

가지에게 의미(뜻)있는 이름을..

G8631

모범생 날나리

인지하기 쉬운 이름을 지어주면 된다.이것이 Branch명. Branch의 실체는이름을 가지고 있고 가장최근 commit의 hash만을 저장하면 되는 별것 아닌 존재.

Page 28: Git의 Commit과 Branch

매달 진행하는 Git 강좌

12월 강좌 : 15일(월) 저녁 7시 ~ 10시

블로터아카데미 (합정역 근처)

신청 : bloteracademy.net

강좌포럼 : class.yostudio.kr