기타

[git]책 - 팀개발을 위한 git, github 시작하기(5일차) 끝

변기원 2023. 1. 22. 22:20

chapter 8,9에서는 깃의 내부 동작원리와 보안설정에 대해 배운다.

보안설정은 실습하면서 중간에 계정을 옮겨야 할 때 보안설정 관련 에러가 나는 독자를 위해 넣은 부분 같다.

구글검색에도 나오는 부분이라 생략한다.

 

깃 원리 이해하기 부분에서는 git init, add, commit, branch의 내부 동작원리를 살펴본다.

git init

로컬저장소 .git 폴더 생성

 

예제 파일 생성, git status명령은 워킹트리, 스테이지, HEAD의 상태를 비교해서 보여주는 것. 현재 단순히 워킹트리에서만 새 파일이 생겼고 스테이지는 비어있고, HEAD는 없다. 예제파일 cat.txt의 체크섬은 ff5bda이다

 

git add

스테이지에 cat.txt가 추가됨. 이와 동시에 .git폴더 안에는 index라는 파일이 생기는데, 명령어를 통해 파일을 살펴보면 Git index라고 써있다. 이것이 바로 스테이지의 실체이다. 마지막은 스테이지의 내용을 확인하는 명령이다. 체크섬을 보면 cat.txt가 올라가 있는것을 볼수있다. 

.git 폴더 안에 objects라는 폴더에 들어가면 ff폴더가 새로 생겼다. 그리고 내용물은 5bda로 시작하는 파일이 있다. 합쳐보면 

ff5bda , cat.txt의 체크섬과 동일하다. 즉, 이게 바로 Git 객체이다. 

커밋을 하고 나면 objects 폴더 안에 파일이 더 생겨있다. 7a, e4라는 폴더가 생겼다. e4폴더 안의 내용을 확인해서 6f8d로 시작하는 파일이 있는 것을 확인했다. git show e46f8d를 해보면 오른쪽사진처럼 이것이 커밋 object임을 알 수 있다. 커밋을 하고 나면 git status가 nothing to commit, working tree clean이라고 해주는데, 이것은 워킹트리, 스테이지, HEAD가 모두 같은 상태임을 나타낸다.

 

branch

test브랜치를 만든다. refs/heads폴더 안에 main과 test파일이 있다. 이게 브랜치의 실체라는 느낌이 온다

test파일의 내용을 보면 e46f8d 로 시작하는 내용이 있다. 이게 바로 브랜치가 가리기고 있는 커밋내용이다.

앞에서 브랜치는 물리적인 가지가 아니라 커밋의 참조일 뿐이라고 한 게 이해된다.

저 브랜치가 어떤 커밋을 가리키고 있느냐에 따라, 어떤 부모를 가지고 있는지에 따라 우리가 지금까지 배운 것들이 적용된다. 

다시 한번 확인하기 위해 main에서 커밋을 하나 만들고 최신 커밋에서 다른 브랜치를 만들어서 가리키고 있는 내용을 확인해 보자

test2브랜치는 146447커밋을 가리키고 있다. 브랜치를 체크아웃하면 HEAD가 해당 브랜치의 내용으로 변경하고 브랜치가 참조하는 커밋의 내용으로 스테이지와 워킹트리를 바꿔준다. 

 

소감

git, github의 실체를 눈으로 확인할 수 있어서 더 이해가 잘 됐다. 책을 읽는 동안 회사에서 협업을 하며 당혹스러운 git에러를 봤던 것들이 떠올랐다. 그리고 '아 그때 왜 그렇게 꼬였었구나. 그때 이렇게 하면 해결할 수 있었구나..' 하는 생각이 들었다. 깃이 너무 어렵다고 생각하고 공부를 미뤘었는데 생각보다 어렵지 않았다. 근데 이런 에러와 상황에 공감하지 못하는 취준생분들은 아무리 깃 강의를 듣고 책을 봐도 잘 모르실 수 있다. 나도 그랬고. 결국 학습과 시행착오가 동반되어야 진짜 지식이 된다는 것을 느낀다.