Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

kimgusxo 님의 블로그

1. 깃(Git)의 기본 개념과 역사 본문

Git

1. 깃(Git)의 기본 개념과 역사

kimgusxo 2025. 2. 28. 20:23

1. 깃(Git)이란 무엇인가

  • 깃은 분산 버전 관리 시스템(DVCS)으로 소스 코드 및 기타 파일의 변경 이력을 효과적으로 관리할 수 있도록 설계된 도구

 

1-1. 깃의 특징

  • 분산형 관리: 모든 개발자가 전체 레포지토리의 복사본을 로컬에 보유하므로, 네트워크 문제나 중앙 서버 장애 상황에서도 작업을 이어갈 수 있다.
  • 빠른 성능: 로컬에서 대부분의 작업(커밋, 브랜치 생성, 로그 확인 등)을 수행하므로 속도가 매우 빠르다.
  • 효율적 저장: 변경된 부분만 저장하는 방식(Date Encoding)을 사용하여 저장 공간을 절약한다.
  • 유연성: 브랜치를 통한 병렬 개발 및 실험적 개발이 가능해 다양한 협업 시나리오에 대응할 수 있다.

 

2. 깃의 탄생 배경

  • 2005년 리누스 토르발스(Linus Torvalds)가 리눅스 커널 개발을 위해 기존 사용되던 중앙 집중형 버전 관리 시스템과 대규모 코드베이스의 한계를 극복하고자 만들었다.

 

3. 깃 용어 정리

  • 레포지토리(Repository): 모든 파일과 변경 이력을 저장하는 데이터베이스
    • 로컬 레포지토리: 개발자의 컴퓨터에 저장된 레포지토리
    • 원격 레포지토리: Github, GitLab 등 서버에 저장된 레포지토리
  • 커밋(Commit): 하나의 변경 사항을 스냅샷으로 기록한 것으로 작성자, 날짜, 메세지 등이 함께 기록된다.
  • 작업 디렉토리(Working Directory): 사용자가 현재 작업중인 파일들이 위치한 영역이며 커밋 전의 상태를 확인 할 수 있다.
  • 스테이징 영역(Staging Area): 커밋할 파일과 변경사항을 임시로 보관하는 곳으로 어떤 변경을 커밋할 지 선택할 수 있다.
  • 브랜치(Branch): 코드베이스의 독립적인 작업 흐름을 만들기 위해 사용된다, 각 기능 개발이나 버그 수정을 별도의 브랜치에서 진행한 후 메인 브랜치에 병합할 수 있다.
  • 체크아웃(CheckOut): 특정 브랜치나 커밋, 파일의 상태로 작업 공간을 전환하는 명령어이다. 다른 브랜치로 이동하거나 특정 파일 버전을 복원할 때 사용한다.
  • 머지(Merge): 여러 브랜치에서 작업한 내용을 하나로 합치는 과정이다. 병합 시 변경 내용이 충돌(Conflict)할 수 있으며 해결해야한다.
  • 리베이스(Rebase): 한 브랜치의 커밋들을 다른 브랜치 위에 재배치하여 깔끔한 커밋 히스토리를 만드는 방법이다.
  • 푸쉬(Push): 로컬 레포지토리의 커밋을 원격 레포지토리에 업로드하여 공유하는 명령어이다.
  • 풀(Pull): 원격 레포지토리의 변경 사항을 로컬로 가져오고 병합하는 작업
  • 롤백(Rollback): 문제가 발생했을 때 이전의 안정적인 상태로 되돌리는 작업을 의미한다.
    • 리셋(Reset): 특정 커밋 상태로 HEAD를 이동시켜 커밋 기록을 수정하거나 되돌릴 때 사용한다.
    • 리버트(Revert): 기존 커밋의 변경 사항을 무효화하는 새로운 커밋을 생성하여 안전하게 변경 사항을 취소한다.
  • 태그(Tag): 특정 커밋을 중요 버전이나 릴리즈 지점으로 표시하기 위해 사용한다
  • 디프(Diff): 두 커밋 간 혹은 워킹 디렉토리와 스테이징 영역 간의 차이점을 비교하여 보여주는 명령어이다.
  • 로그(Log): 커밋 히스토리를 시간 순서대로 확인 할 수 있는 명령어로 변경 내역을 추적할 때 주로 사용한다.
  • 블레임(Blame): 특정 파일의 각 라인이 마지막으로 수정된 커밋과 작성자를 확인할 수 있는 도구이다.
  • 스태시(Stash): 작업 중이지만 아직 커밋할 준비가 되지 않은 변경 사항을 임시로 저장해두는 기능이다, 다른 브랜치로 전환 후 다시 복원하여 작업을 이어나갈 수 있다.
  • 체리픽(Cherry-pick): 다른 브랜치에 있는 특정 커밋 하나를 선택하여 현재 브랜치에 적용하는 명령어이다.
  • 풀 리퀘스트(Pull Request): 원격 저장소에서 특정 브랜치의 변경 사항을 메인 브랜치에 병합하기 위해 요청하는 프로세스이다, 코드 리뷰, 토론, 테스트 과정을 거쳐 최종 병합 여부를 결정한다.
  • 포크(Fork): 다른 사용자의 리포지토리를 자신의 계정으로 복제하여 독자적으로 수정하고, 이후 원본 리포지토리에 기여할 수 있도록 하는 기능이다.
  • 클론(Clone): 원격 레포지토리의 전체 내용을 로컬에 복제하여 로컬 환경에서 작업을 진행할 수 있도록 하는 명령어이다.
  • 리모트(Remote): 로컬 레포지토리와 연결된 원격 저장소를 의미한다, 기본적으로 origin이라는 이름이 할당되며 추가로 여러 리모트를 설정할 수 있다.

 

4. 분산 버전 관리의 장점

  • 안정성 및 백업: 모든 개발자가 전체 이력을 보유하고 있으므로, 한 곳의 손실로 인한 데이터 손상이 없다.
  • 병렬 작업: 각 개발자가 자신의 브랜치에서 독립적으로 작업한 후 필요 시 메인 브랜치에 병합할 수 있어, 충돌을 최소화할 수 있습니다.
  • 이력 추적 및 되돌리기: 커밋 단위로 변경 사항을  추적할 수 있어, 문제가 발생 했을 때 특정 시점으로 손쉽게 되돌릴 수 있다.
  • 효율적인 협업: 여러 개발자가 동시에 기능 개발, 버그 수정 등 다양한 작업을 진행하며 풀 리퀘스트와 코드 리뷰를 통해 코드 품질을 유지할 수 있습니다.
  • 확장성: 포크와 클론 기능을 통해오픈 소스 프로젝트에 기여하거나 여러 팀이 분산되 환경에서 독립적으로 작업할 수 있다.