Git의 Commit과 Branch

Preview:

Citation preview

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

도화지 사진첩

나는 화가다

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

도화지 사진첩

나는 화가 그림을 그리다

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

도화지 사진첩

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

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

도화지 사진첩

나는 화가 그림을 그리다 2

눈썹을 더 그려봅니다.

도화지 사진첩

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

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

도화지 사진첩

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

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

도화지 사진첩

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

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

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

도화지 사진첩

1

2

3

사진에 번호를 붙이다

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

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

Hash를 쓸까?

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

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

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

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

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

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

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

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

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

년이 걸린다.”

- Pro Git 중에서..

도화지 사진첩

H34FC

AB9C7

87GO1

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

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

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

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

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

모자가 맘에 안들어!

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

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

체크아웃

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

그림을 그리다 4

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

?

사진을 찍다 4, 누가 Parent?

G8631

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

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

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

G8631

이렇게 만들어진것이 Branch

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

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

G8631

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

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

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

G8631

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

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

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

G8631

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

도화지 사진첩

H34FC

AB9C7

87GO1

AB9C7

H34FC

AB9C7

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

G8631

모범생 날나리

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

매달 진행하는 Git 강좌

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

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

신청 : bloteracademy.net

강좌포럼 : class.yostudio.kr

Recommended