GIT 동작 방식

김민건·2021년 11월 19일
0

기술

목록 보기
8/19

Git

협업을 할 때, 아니 굳이 협업을 하지 않더라도 이제 개발자에게 Git은 더이상 선택이 아닌 의무가 되고 있다. 협업을 할때 로컬에서 작업한 내용을 원격 저장소에 업로드할 수 있는 장점은 두말하면 잔소리고... 개인 프로젝트를 진행할 때도 커밋 내역을 보고 롤백하거나, 체리픽을 수행하며 내 워킹 디렉토리도 안정적이고 효율적으로 관리할 수 있다.

하지만 정작 이런 기능들이 어떻게 수행되는지 전혀 무지하고 있다는 사실을 깨달았다. 따라서 Git 동작 방식에 대해 간략히 정리해보려 한다.

Git 관련 기본 개념

Git의 동작 방식에 대해 알아보려면, 가장 먼저 Git을 논할 때 가장 기본이 되는 로컬 저장소, 원격 저장소 개념은 물론이고! 우리가 일반적으로 논하는 워킹 디렉토리와 스테이징 공간, 로컬 저장소가 정확히 어떤 의미에서 다른지 확실하게 넘어가야 한다고 생각한다.

워킹 디렉토리 ( Working Directory )

Git을 사용하지 않더라도 흔히 접할 수 있는 용어이다. 정말 단순하게 생각해서 우리 개인 PC에서 프로젝트를 만들고 실시간으로 코드를 작성하는 그대로 반영되는 공간을 의미한다.

스테이징 공간 ( Staging Area )

워킹 디렉토리에서 작업했던 내용을 해시 알고리즘을 적용하여 관리한다. 각 파일의 내용으로 해싱처리하여 파일 내용을 간편하게 비교함으로써 conflict 체크, 수정된 파일 확인 등에 사용된다.

로컬 저장소 ( Local Repository )

로컬 저장소는 git commit 또는 git fetch 작업 수행 시 변동되는 공간이다. 기존 스테이징 공간과 다른 점은 단순히 파일 정보 뿐만 아니라, 이전 Commit 정보, 누가 커밋했는지 등에 대한 정보가 추가적으로 저장된다. 따라서 conflict 등 파일과 관련된 처리는 스테이징에서, 이전 이력 및 계정 정보에 대한 관리는 로컬 저장소에서 이루어진다는 개념으로 이해했다.

원격 저장소 ( Remote Repository )

말그대로 원격의 저장소를 의미한다. 로컬에서 작업한 내용을 다른 PC나 사용자들이 공유할 수 있도록 간편하게 사용할 수 있는 저장 공간을 제공한다.

Git init

무작정 " .git 폴더 만들어주는 것 아닌가요? " 라고 생각하고 있었다. 하지만 정확히 이 .git 폴더가 왜 필요한지, 어떤 데이터를 저장하고 있는지 알아보자

먼저 git init은 로컬과 원격 저장소를 생성/연결하기 전에, 먼저 로컬 저장소와 스테이징 공간을 생성해주는 커맨드다. 차후 로컬과 원격 저장소의 연결 (.git/config) 과 코드 버전 관리 (.git/index , .git/objects) 를 해주기 위해 필요한 기본적인 설정에 해당한다. 즉, 차후 git add , git commit 등의 작업이 수행될 때 발생하는 데이터들이 결국 .git 폴더에 저장되고 관리된다.

Git remote add <별칭> <원격 저장소 주소>

로컬 저장소와 원격 저장소의 연결을 추가하는 것을 의미한다. 이때, 일반적으로 git clone에는 이 작업이 내재되어 있는데, git remote add 명령어를 통해 기본 원격 저장소가 아닌 제 2의, 제 3의 원격 저장소도 추가하여 <별칭> 으로 관리할 수 있다. ( Branch를 사용하지 않는 경우가 아니라면 무슨 의미가 있을진 잘.... )

Git add <대상 파일/폴더명>

워킹 디렉토리에서 작업한 내용을 스테이징 공간에 저장하는 과정이 이루어진다.

Git commit

git add 명령어로 끌어온 스테이징 공간에 저장된 데이터를 로컬 저장소로 옮기면서, 계정 정보 및 커밋 히스토리 갱신 작업이 추가적으로 수행된다.

Git push <별칭> <브랜치명>

로컬 저장소에서 발생한 커밋 내역을 원격 저장소에 업로드하는 작업이 진행된다.

References

http://daplus.net/git-git-추가-vs-푸시-vs-커밋/

https://velog.io/@leyuri/Git-remote-리모트-저장소-저장소-추가하는-법

https://it-eldorado.tistory.com/4

https://devkingdom.tistory.com/217

https://m.blog.naver.com/dlaxodud2388/222321875323

profile
백엔드 꿈나무

0개의 댓글