본문 바로가기
프로그래밍 ( Programming )/깃허브 (GitHub)

3. Git 동작 원리

by Jayce_choi 2021. 11. 17.
반응형

깃 프로젝트에 담겨 있는 데이터들은 파일 시스템 상에서의 스냅숏이라고 볼 수가 있습니다. 

실제로 프로젝트를 커밋하여 적용할때의 그 순간을 중요시한다는 특징이 있습니다. 파일 자체를 저장하기보다는 수정 내역 자체를 저장합니다. 

 

Git의 동작 원리를 바르게 이해하기 위해 다음 3가지를 알아야합니다.

1. Working Directory (Local, Working Copy): 현재 프로젝트 폴더에 존재하는 파일들 그 자체를 의미합니다. 

2. Index (Staging Area, Cache): 개념적으로는 커밋이 이뤄질 준비가 된 파일의 내용들이 위치하는 영역. 실제로 하나의 파일 (. git/index)로 존재하는데 로컬에 변동 사항이 생겼을 경우, git add 명령어를 수행함으로써 해당 변동 사항을 인덱스 영역에 반영시킬 수가 있습니다. 그리고 인덱스 파일 (. git/index)은 커밋이 이뤄질 준비가 된 파일의 내용들 각각에 대해 그 파일명과 해당 파일의 내용을 담고 있는 Blob 파일의 주소가 기록됩니다. 

3. Git Directory: Git 프로젝트의 메타 데이터와 데이터 정보가 저장되는 디렉터리입니다. 

 

동작 과정입니다. 

우선 원격 저장소에 우리가 수정한 코드를 보내기 위한 과정입니다. 

1. Working Directory에서 우리는 코드를 수정합니다. 

2. 그리고 수정 사항이 반영된 코드를 반영하기 위해서 git add 명령어를 이용하여 Staging Area로 보냅니다.

3. 이후 Staging Area에서 Commit 명령어를 통해서. git 디렉터리 상에 commit 당시의 수정 내역들이 기록됩니다. 즉 우리가 가진 컴퓨터 내의 Repository에 저장됩니다. 

4. 이렇게 commit 된 내용들을 git push라는 명령을 이용해 최종적으로 github과 같은 원격 저장소로 보내게 됩니다. 

 

이제 다른 사람이 했던 데이터를 그대로 가져오기 위해서는 다음과 같은 과정을 진행합니다.

1. git fetch를 통해서 우선 원격 저장소로부터 수정된 내역을 받을 수가 있습니다. 

2. 다만 이러한 과정에서 내가 수정한 내역이 원격지 저장소에 있는 내역과 다를 수가 있기에 git merge를 수행하여 자신의 컴퓨터에 있는 소스코드를 원격지 저장소와 맞추게 됩니다. 

* git fectch와 git merge를 한 번에 사용하는 명령어인 git pull을 사용할 수도 있습니다. 


저장소 (Repository)에 대해서 

저장소는 실제 소스코드가 담겨 있으면서 커밋 내역 등의 모든 작업 이력이 담겨 있는 공간입니다. 실제로 프로젝트의 메타 데이터를 포함해 각종 데이터는 git 폴더에 담기게 되는데 실제로 해당 폴더에 담긴 내용들을 살펴보면 해시 값 등이 담겨있는 것을 볼 수 있습니다. 

해시값이 포함되어있는 이유는 각 작업들을 분류하기 위해서 내부적으로 충돌이 발생하지 않도록 관리 차원에서 사용을 하게 됩니다. 

 C:\Users\chj52\Desktop\DTU_Git\aa\.git\logs\refs\heads에 master 파일 내부 (해시값)

반응형

댓글