일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 쿠버네티스
- 왜 쿠버네티스
- 오픈텔레미트리
- opentelemetry
- 깃
- COMMIT
- Kubernetes Architecture
- 쿠버네티스 유저
- Dag
- 워커 노드 구조
- smart money
- Data store
- controller manager
- worker node
- worker node architecutre
- k8s
- Branch
- 컨테이너 런타임
- 워커 노드
- 쿠버네티스 네터워크
- GIT
- container runtime
- 종결 조건
- master node
- 장단기 금리 차
- 마스터 노드
- 기저조건
- Instrumentation libraries
- Kubernetes User
- 쿠버네티스 구조
- Today
- Total
개발과 잡지식
Git00 - Git 이란? 본문
git이란
이번 글에서는 git의 추상적인 작동원리부터 시작하려고 합니다.
사전 지식으로 hash 정도 알고 보시면 편하실 것 같아요, 뭐.. 몰라도 상관 없게 글을 쓰긴 할 듯?
Git 이란?
GIT은 대표적인 VCS(Version Control System): 버전 관리 시스템 입니다.
버전 관리란
위의 그림 처럼 하나의 파일에 대해서 여러 버전을 만들고 이를 관리하는 프로그램을 말한다.
얼추 Git(깃)에 대해서 들어 보거나 찾아 봤다면
add, branch, local, commit 등등 이야기를 들었을 것이라고 생각 된다.
이번에는 앞으로 깃을 쉽게 이해하기 깃의 버전 관리를 어떻게 하는 지 대략적으로 가볍게 설명하려고 한다.
How do git work?
basic define
Object, address, ref말을 모르겠다면 아래의 예로 간단하게 이해하고 넘어가죠.
Object, 오브젝트 : 간단하게 깃이 관리하기 위해 저장하는 변수라고 생각해도 무방하다. - 아이유 라는 사람이 가수로 등록 했다.
key, 키 : Object를 저장한다고 하면 메모리 어딘가에 저장이 될텐데 이 저장된 공간의 주소라고 생각하자, - 아이유의 주민등록 번호
ref, 참조, 별명 : 위에서 object를 저장한 공간을 부르는 여러가지 이름. - 아이유 주민 번호가 가리키는 사람은 아이유, 이지은, 이지금 등등으로 별명들로 불린다.
깃에 파일을 등록하면 (git add $fileName) 깃은 파일을 현재 상태를 오브젝트화 해서 저장한다.
그러면 깃은 파일에 대해서 SHA라는 독특한 방식을 통해서 겹치지 않는 Key를 만든다.
Structure of Git
Tree structure
위의 그림을 설명하자면 tree라는 root 디렉토리가 있고. 현재 tree가 가지고 있는 파일에는 readme, Rakefile이 있다.
lib는 다른 tree를 가리킨다고 이해하면 된다. 이를 통해 tree간 이동이 가능해진다.
Tree and version
위의 그림에서 우선 d8329f인 (아래에서는 트리1이라고 부름)트리와 그 밑부분만 보자
위와 같은 경우 test.txt라는 파일을 깃에 등록해서 83baae라는 key값을 가지는 object가(=test.txt의 version 1) 만들어 진것으로 이해하면 된다.
이제 3c429c tree를(아래 부터 트리2) 보자면 lib = back (혼란을 방지하기 위해 위의 lib 설명을 back이라고 보자), 즉, 간단하게 다른 트리를 가리키는 용어로 이해하자) 은 현재 트리1을 가리키고 있고 트리1과 달리 "new file"과 "test.txt"를 편집해서 버전2로 된 오브젝트들을 가지고 있다.
What is commit?
위의 그림에서 우선적으로 트리와 등록된 파일들을 보자.
d8329f인은 이미 위에서 설명한 구조를 가로로 바꾼 것이다.
3c4e9c 부터 설명을이어 가자면 new.txt, test.txt 같은 경우
트리2에서 저장된 이후 변경이 되지 않았고 test.txt, new.txt를 그대로 가리키고 있다.
이를 다시 말하면, 저장된 object대한 key값을 통해서 다른 tree에서도 같은 object를 가리키고, 사용한다는 것이다.
위를 통해 내용물도 같은 파일에 대해서 여러번 저장하지 않고 하나의 파일을 여러 곳에서 사용 가능하게 된다.
- 철수는 언어, 수학, 외국어를 공부하려고 오답 노트를 만드는데, 외국어 오답노트를 새로 만드려고 할 때 마다, 바뀌지도 않은 수학 오답 노트와 언어도 오답 노트를 새로 만드는 것은 철수의 체력(자원)을 엄청 나게 낭비하는 것이다. 이게 맞는 설명인지는 모르겠다... ㅋㅋ
그리고 각각의 트리를 만드는 분기는 commit이라는 행위를 통해서 나눠 진다. (-m을 붙여서 메세지를 쓸수도 있다. 아래에서 "first commit"이 메세지 이다.)
git commit -m "first commit"
흔히 위와 같이 써지는 행위를 다시 말로 풀자면
현재 파일들을 새로운 트리를 생성하고 파일들을 저장하는데,
파일들이 저장될 때 오브젝트가되고 각각의 오브젝트는 key를 가지고 있으며
만약 변동 사항이 없는 파일을 경우 오브젝트화 하면 같은 key값을 가지게 된다는 것이다.
트리2와 트리3에서 처럼 파일이 전체 변경되지 않으면 사실 새로운 commit을 할 수 없지만 이해를 돕기 위한 그림으로 이해하자.
What is branch?
위의 그림 에서 이제 commit 있는 부분으로 부터 오른쪽 은 이해가 됬을..꺼라 생각한다.
그럼 왼쪽에 있는 빨간색이 무엇이냐면 커밋들에 ref, 별명이라고 보면 된다.
깃에서는 이를 *branch*라고 부른다.
개발이든 작업을 하게 됬을 때 commit으로 정의된 애를 여러가지로 별명 붙여서 사용하는 경우가 발생하게 된다.
간단하게 트리가 같은 object에 대해서 key값을 통해서 접근 하듯이 여러 벌명들로 하나의 commit을 가리킬 수 있다.
위의 내용들은..
출처 : https://git-scm.com/book/en/v2
깃 공식 문서에서 10. git Internal 관련한 내용들을 최대한 쉽게
매우 부족
설명하려고 한 것입니다.
'git' 카테고리의 다른 글
Git04 - Git ignore (0) | 2020.12.25 |
---|---|
Git03 - Git alias (0) | 2020.12.25 |
Git02 - Git remote and local (0) | 2020.12.25 |
Git01 - Git branch, Commit (0) | 2020.12.25 |