Git? Git!

Nekoder
|2025. 5. 9. 14:57
728x90
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.

git은 무료이며 오픈 소스인 분산형 버전 관리 시스템으로, 소규모 프로젝트 부터 대규모 프로젝트까지 빠르고 효율적으로 처리할 수 있도록 설계되었습니다.

위 글은 git에서 소개하는 git입니다.

 

git은 VCS(Version Control System)의 일종이며, 소스 코드와 변경 이력을 관리하는 도구입니다.

개발자들이 협업할 때 파일이 언제, 누가, 뭘, 어떻게 바꿨는지를 추적할 수 있게 도와줍니다. 근데 분산형(distributed)인 VCS라서 더 유용합니다.

 

간단하게 적어보는 다른 대표적인 VCS인 SVN과의 차이점.

더보기
SVN도 대표적인 버전 관리 시스템입니다. 선배에게 원래 SVN을 사용하다가, 최근 git으로 변경했다는 이야기를 들어서 들은 데로만 간단하게 적어보겠습니다.

 

SVN(Subversion)은 중앙 서버에 모든 버전 기록이 저장되는 구조입니다. 개발자는 서버와 연결해서 작업해야 하고, 커밋도 즉각적으로 서버에 반영됩니다.  그래서 서버에 연결되어 있지 않다면 히스토리를 확인하거나, 커밋을 할 수 없습니다. 그리고 커밋 중심으로, 각자 서버에 바로 반영하다 보니 충돌이 발생할 수 있습니다.

 

그와 다르게 Git은 각 개발자가 로컬에 전체 저장소가 clone(복제)됩니다. 커밋은 로컬에서 먼저하고 remote repository에 push해서 저장합니다. 이 구조 덕분에 Git은 네트워크 연결 없이도 커밋, 로그 확인, 브랜치 전환 등의 작업이 가능합니다.

 

그렇다고 SVN이 열등하다는 건 아닙니다.

서버가 모든 이력을 관리하기 때문에 관리자가 전체 권한을 갖고 통제하기에는 편하다는 점도 있고, 디자인 소스 같은 이미지, 동영상 파일 관리에 유리합니다.

 

개념 설명
Repository 코드와 이력을 저장하는 공간입니다. 로컬과 원격(Github, GitLab 등)으로 나뉩니다.
Snapshot git은 변경된 내용만 저장하는 것이 아니라, 커밋 시점의 전체 디렉토리 상태를 snapshot으로 저장합니다.
단, 효율을 위해 변경 된 파일만 실제로 기록됩니다. 
Working Tree 실제로 개발자가 보고 수정하는 현재 디렉토리 상태입니다. 파일을 수정하면 이 Working Tree에 반영됩니다.
Head 현재 작업중인 branch의 마지막 커밋을 가리킵니다. head가 가리키는 위치가 곧 현재 작업 기준점 입니다.
Commit git이 저장한 특정 시점에 스냅샷입니다.
변경사항이 설명과 함께 저장되며, 되돌아가거나 비교하는 기준이 됩니다.
Branch 하나의 독립된 작업 흐름입니다.
실험, 기능 개발, 버그 수정 등에서 분기점을 만들어 안전하게 작업할 수 있게 해줍니다.
Merge 서로 다른 브랜치에서 진행된 작업을 하나로 합치는 과정입니다. 변경 사항이 충돌할 경우 해결이 필요합니다.
Stage / Index 커밋하기 전, 어떤 변경사항을 포함시킬지 선택하는 임시 공간입니다.
`git add` 명령어로 파일을 인덱스에 추가합니다.
Remote Github, GitLab 등의 서버에 있는 저장소로, 협업을 위한 공유 지점입니다. origin이 기본으로 쓰입니다.

 

로컬 저장소(Local Repository)

개발자의 컴퓨터 내부, 즉 현재 프로젝트 디렉토리 내에서 관리됩니다. git을 초기화(`git init`)하면 `.git`  이라는 숨겨진 폴더가 생기고, 여기에 커밋 내역, 브랜치 정보, 설정 파일 등 git이 사용하는 모든 메타데이터가 저장됩니다.

로컬 저장소는 개인 개발자나 소규모 실험적인 작업에 매우 유용하며, 인터넷 연결 없이도 코드를 버전 관리 할 수 있다는 점이 아주 아주 큰 장점입니다. 

 

원격 저장소(Remote Repository)

원격 저장소는 인터넷이나 네트워크 상에 위치한 외부 저장소입니다. 대표적인 예로는 Github, GitLab, Bitbucket 등이 있습니다. 사용하는 목적은

  • 여러 개발자 간 협업
  • 프로젝트의 백업 및 배포
  • CI/CD 파이프라인 연동 등 외부 시스템과의 통합

등이 있습니다.

원격 저장소는 로컬 저장소의 특정 상태(브랜치, 커밋 등)를 업로드(push)하거나 다운로드(pull)하는 방식으로 동기화됩니다.

 

git의 세 가지 작업 영역

git은 로컬 저장소 내부에서 세 가지 주요 작업 영역을 통해 파일의 상태를 관리합니다.

 

1. Working Directory(작업 디렉토리)

개발자가 실질적으로 작업하는 공간입니다. `.git`을 제외한 모든 영역을 의미합니다.

2.  Staging Area(스테이징 영역)

`git add` 명령어를 통해 변경된 파일을 임시로 등록하는 영역입니다. 이 단계에서는 아직 저장소에 커밋되지 않았으며, 커밋할 준비가 완료된 파일들이 여기에 모입니다.

3. Repository(저장소) 

`git commit`을 실행하면, Staging Area에 있던 변경사항이 저장소로 기록됩니다. 이 저장소는 git이 관리하는 내부 영역으로, 커밋 이력들이 이곳에 저장됩니다. `.git` 디렉토리가 repository입니다.

  1. Working Directory에서 파일을 수정합니다.
  2. `git add`로 변경된 파일을 스테이징 영역에 올립니다.
  3. `git commit`을 통해 저장소에 기록합니다.
  4. 필요하다면 `git push`로 원격 저장소에 업로드해 다른 개발자와 동기화합니다.

실제 다루는 건 다음 포스팅에서 작성해보겠습니다.

https://chanfifo77.tistory.com/129

728x90

'( * )Engineering > 🐾Git' 카테고리의 다른 글

Git 명령어 간단 리뷰  (0) 2025.05.10