이전에 대략적으로 설명을 드렸습니다만, git의 원리(=버전을 만드는 구조)를 알고 사용하는 것이 추가적인 기능들을 사용하고 이해하는데 큰 도움이 됩니다. 따라서 이번 시간에는 git의 원리 중에서도 git의 구조에 대해 설명하는 시간을 갖도록 하겠습니다.

※ git의 원리에는 두가지가 있습니다.  1) git의 구조, 2) git의 파일 상태 

 

 

1. GIT의 구조


 git이 버전을 만드는 데에는 크게 3개의 구조가 필요합니다.

첫번째는 Working Tree, 두 번째는 Stage, 세 번째는 Repository입니다.

 먼저 각각의 구조에 대해 설명드리고 어떤 식으로 파일들이 운영되는지 알려드리겠습니다. 

① Working Tree : 작업공간을 뜻하는 공간으로, git init명령어를 통해 생성된 공간을 말합니다. 파일의 수정과 저장하는 곳입니다. 우리가 흔히 생각하는 폴더라고 보시면 됩니다. 작업물은 파일이고요. 

 

② Stage : 무대를 뜻하는 공간으로, Working Tree처럼 보이는 공간이 아닌, 가상의 공간입니다. Working Tree에 있는 파일을 Stage에 등록함으로써 등록한 파일을 버전으로 만들기 전 대기하는 공간입니다. Stage가 필요한 궁극적인 이유는 여러개의 파일들이 Working Tree에서 수정되었어도 Stage를 통해서 원하는 파일의 변경사항을 버전으로 등록 가능해지기 때문입니다. 

 

③ Repository : 저장소를 뜻하는 공간으로, Stage에 대기하고 있던 파일들을 버전으로 저장해주게 됩니다. Repository에 등록이 되면 버전(commit)이 완성되게 됩니다. 

 

2. GIT의 구조 (운영방식)


 

 그럼 다음 예시를 통해 변경된 파일들을 어떻게 각각의 공간으로 등록하고 운영하는지 보여드리도록 하겠습니다. 

CASE) Working Tree에 있는 3개의 파일(A, B, C)을 모두 변경하고, 그중 A, B파일만 버전으로 등록하는 상황

 

위의 상황이면 다음과 같이 진행됩니다. 

1) A,B,C파일에 내용 변경 후, 상태 확인 git status

2) git add로 A, B파일을 Stage에 등록

3) Stage에 있는 A,B파일을 git commit으로 version 등록 

 

 

1) A,B,C파일에 내용 변경 후, 상태 확인 git status

   vim 편집기를 사용해 A, B, C파일의 내용을 변경한 뒤, git status 명령어를 사용하게 되면 다음과 같이 A,B,CA, B, C 파일들이 수정되어있다고, git에서 인식하게 됩니다. (이는 사전에 A, B, C파일을 별도 버전(커밋)으로 등록하였기 때문에 수정됨을 알 수 있습니다.) 여기서 수정한 A,B,C 파일은 모두 Working Tree에 있는 상태입니다. 

 

2) git add로 A, B파일을 Stage에 등록

  git add 명령어를 통해 A.txt와 B.txt만 Stage에 올렸습니다. C.txt파일은 이전 버전과 비교하여 수정은 되었지만 이번 버전에는 필요가 없어 등록하지 않을 예정입니다. 따라서 아래 초록 글씨로 A, B 파일은 stage에 올라갔다고 표기되고, C.txt 파일은 1)에서와 같이 빨간 글씨로 스테이지에 올라가지 않았다고 표기가 됩니다. 

 

3) Stage에 있는 A,B파일을 git commit으로 version 등록 

   git commit을 사용하여 Stage에 있는 A.txt와 B.txt를 Repository에 등록해주면 버전은 생성이 되고 git show를 통해 방금 생성된 버전에 대한 정보(어떤 부분이 변경되었는지?)를 알 수 있게 됩니다. 이후 git status를 통해 git의 상황을 보게 되면, A, B는 이미 수정된 사항이 버전으로 등록되었기 때문에 Working Tree와 Stage에서 없어지고 Repository에 저장됩니다.(여기서 없어진다는 표현은 파일의 삭제가 아니라 내용이 버전 안에 포함되어 생성된 버전과 비교하여 변경사항이 없음을 말합니다.) 버전으로 커밋하지 않은 C.txt만 Working Tree에 남아있게 됩니다. 

 

 

이로써 git의 구조와 구조 안에서 버전이 어떤식으로 생성되는 원리에 대해 설명하였습니다.

혹시 추가적으로 궁금하신 사항이 있으면 언제든지 댓글 부탁드립니다. :)

 

 

 

 

*Reference

- "지옥에서 온 문서 관리자 깃&깃허브 입문" 이지스버블리싱 - 이고요, 고경희 지음

-

-

 

부족한 글이지만 읽어주셔서 감사합니다. 

+ Recent posts