Git

Git은 2005년 리누스 토르발스(Linus Torvalds)가 개발한 분산형 버전 관리 시스템으로, 코드 변경 이력을 체계적으로 추적하고 협업을 최적화한다. 각 개발자가 전체 저장소의 복사본을 로컬에 보유하며, 변경 사항을 로컬에서 커밋하고, 필요 시 원격 저장소와 동기화한다. 이를 통해 오프라인에서도 작업이 가능하며, 병합 및 분기 기능이 강력하여 협업에 유리하다.

Git의 핵심 설계 철학은 데이터를 일련의 스냅샷으로 저장하는 접근 방식으로, 다른 버전 관리 시스템과 차별화된다. 각 커밋은 프로젝트 파일의 전체 상태를 캡처하며, 변경되지 않은 파일은 이전 버전에 대한 링크로 효율적으로 저장된다. 이러한 구조는 빠른 성능, 데이터 무결성, 분산 작업 환경을 가능하게 한다.

핵심 개념

Git의 핵심 개념은 다음과 같다:

  1. 분산 버전 관리: Git은 중앙 서버에 의존하지 않는 분산형 버전 관리 시스템으로, 모든 사용자가 전체 저장소의 복사본을 로컬에 가지고 있다.
  2. 스냅샷 기반 저장: Git은 파일의 변경 사항을 델타(차이점)로 저장하는 대신, 시점별 파일 시스템의 스냅샷으로 저장한다.
  3. 세 가지 상태: Git의 파일은 작업 디렉토리(Working Directory), 스테이징 영역(Staging Area), 그리고 저장소(Repository)의 세 가지 상태 중 하나에 있을 수 있다.
  4. 콘텐츠 주소 지정 저장소: Git은 모든 객체를 SHA-1 해시로 식별하는 콘텐츠 주소 지정 시스템을 사용한다.
  5. 객체 모델: Git은 네 가지 기본 객체 유형(블롭, 트리, 커밋, 태그)을 사용하여 데이터를 저장한다.
  • 스냅샷 메커니즘:

    1
    
    커밋 시 파일 상태 전체 저장 → 변경된 파일은 새 객체 생성, 미변경 파일은 기존 객체 참조.
    
1
2
3
4
5
6
7

- **3단계 구조**:

   ```
   1. 작업 디렉토리(Working Directory): 수정 중인 파일  
2. 스테이징 영역(Staging Area): 커밋 준비 완료 파일
3. 저장소(Repository): 영구적 스냅샷 저장.

목적

Git의 주요 목적은 다음과 같다:

  1. 코드 변경 이력 관리: 소스 코드의 모든 변경 사항을 추적하고 관리한다.
  2. 협업 지원: 여러 개발자가 동일한 코드베이스에서 동시에 작업할 수 있도록 한다.
  3. 분산 작업 환경 제공: 네트워크 연결 없이도 로컬에서 대부분의 버전 관리 작업이 가능하다.
  4. 비선형 개발 지원: 브랜칭과 병합을 통해 여러 개발 라인을 효율적으로 관리할 수 있다.
  5. 데이터 무결성 보장: SHA-1 해시 기반 체크섬을 통해 모든 변경 사항의 무결성을 보장한다.

필요성

Git과 같은 버전 관리 시스템의 필요성은 다음과 같다:

  1. 변경 이력 추적: 누가, 언제, 무엇을, 왜 변경했는지 추적할 수 있어야 한다.
  2. 협업 효율성: 여러 개발자가 동시에 작업할 때 코드 충돌을 최소화하고 효율적인 협업을 가능하게 한다.
  3. 백업 및 복구: 이전 버전으로 쉽게 되돌릴 수 있어 실수나 문제 발생 시 빠른 복구가 가능하다.
  4. 실험적 개발: 메인 코드에 영향을 주지 않고 새로운 기능이나 아이디어를 실험할 수 있다.
  5. 프로젝트 관리: 릴리스 버전 관리, 이슈 추적, 코드 리뷰 등 전반적인 프로젝트 관리를 지원한다.

주요 기능

Git의 주요 기능은 다음과 같다:

  1. 브랜칭과 병합: 독립적인 개발 라인을 생성하고 나중에 통합할 수 있는 강력한 기능을 제공한다.
  2. 스테이징 영역: 커밋하기 전에 변경 사항을 선택적으로 준비할 수 있는 중간 영역을 제공한다.
  3. 분산 작업: 중앙 서버 없이도 로컬에서 대부분의 작업을 수행할 수 있다.
  4. 데이터 무결성: SHA-1 해시를 사용하여 모든 데이터의 무결성을 보장한다.
  5. 속도와 효율성: 로컬 작업, 최적화된 저장 방식으로 빠른 성능을 제공한다.
  6. 오픈 소스: 무료로 사용 가능하며 커뮤니티의 지속적인 개선과 지원을 받는다.

3.4 역할 및 특징

  • 역할: 소스 코드의 변경 이력을 관리하고, 협업을 지원하는 도구입니다.

  • 특징: 빠른 성능, 분산형 구조, 강력한 브랜치 및 병합 기능을 제공합니다.

역할

Git은 소프트웨어 개발 과정에서 다음과 같은 역할을 수행한다:

  1. 코드베이스 관리: 소스 코드와 관련 파일의 체계적 관리를 지원한다.
  2. 변경 이력 보존: 모든 변경 사항을 시간 순으로 보존하고, 언제든지 과거 버전으로 돌아갈 수 있게 한다.
  3. 협업 조정: 여러 개발자의 작업을 조율하고, 충돌 해결을 지원한다.
  4. 릴리스 관리: 소프트웨어 릴리스 버전을 태그하고 관리하는 기능을 제공한다.
  5. 워크플로우 지원: GitFlow, GitHub Flow 등 다양한 개발 워크플로우를 지원한다.

특징

Git의 주요 특징은 다음과 같다:

  1. 분산 아키텍처: 모든 사용자가 전체 저장소의 복사본을 가지고 있어 오프라인 작업이 가능하다.
  2. 스냅샷 기반 저장: 델타 기반이 아닌 스냅샷 방식으로 데이터를 저장하여 성능과 무결성을 최적화한다.
  3. 브랜칭 모델: 가볍고 빠른 브랜치 생성과 병합을 지원하여 비선형 개발을 가능하게 한다.
  4. 세 단계 워크플로우: 작업 디렉토리, 스테이징 영역, 저장소의 세 단계 워크플로우를 통해 변경 사항을 세밀하게 관리한다.
  5. 데이터 보장: SHA-1 해시를 통한 무결성 검증으로 데이터 손상을 방지한다.
  6. 확장성: 대규모 프로젝트와 파일을 효율적으로 처리할 수 있는 확장성을 제공한다.

주요 원리 및 작동 원리

Git의 작동 원리는 다음과 같이 요약할 수 있다:

  1. 객체 저장소: Git은 모든 데이터를 네 가지 유형의 객체(블롭, 트리, 커밋, 태그)로 저장하며, 이 객체들은 SHA-1 해시로 식별된다.
  2. 스냅샷 방식: 다른 버전 관리 시스템과 달리, Git은 파일 변경 사항의 델타가 아닌 프로젝트 전체 상태의 스냅샷을 저장한다.
  3. 세 가지 상태: 파일은 작업 디렉토리(수정됨), 스테이징 영역(스테이징됨), 저장소(커밋됨)의 세 가지 상태를 가질 수 있다.
  4. 참조 및 포인터: Git은 브랜치, 태그, HEAD와 같은 참조를 사용하여 특정 커밋을 가리킨다.
  5. 방향성 비순환 그래프: 커밋 이력은 방향성 비순환 그래프(DAG)로 표현되며, 각 커밋은 부모 커밋을 참조한다.

Git 작동 원리 다이어그램:

1
2
3
4
5
6
7
[작업 디렉토리] <-- 체크아웃 -- [저장소(.git)]
      |                           ^
      v                           |
    (수정)                         |
      |                           |
      v                           |
[스테이징 영역] --- 커밋 ----------->

구성 요소 및 아키텍처

Git의 주요 구성 요소와 아키텍처는 다음과 같다:

  1. Git 객체:
    • 블롭(Blob):
      • 기능: 파일 내용 저장
      • 역할: 파일의 실제 데이터를 저장하지만 파일명이나 메타데이터는 포함하지 않음
    • 트리(Tree):
      • 기능: 디렉토리 구조 표현
      • 역할: 블롭과 다른 트리에 대한 참조를 저장하여 파일 시스템 계층 구조 관리
    • 커밋(Commit):
      • 기능: 프로젝트 상태 스냅샷 및 메타데이터 저장
      • 역할: 루트 트리, 부모 커밋, 작성자, 커미터, 타임스탬프, 커밋 메시지 등을 포함
    • 태그(Tag):
      • 기능: 특정 커밋에 이름 부여
      • 역할: 릴리스 버전 등 중요한 커밋을 표시
  2. 참조(References):
    • HEAD:
      • 기능: 현재 체크아웃된 브랜치나 커밋을 가리킴
      • 역할: 현재 작업 중인 위치를 추적
    • 브랜치:
      • 기능: 특정 커밋을 가리키는 포인터
      • 역할: 독립적인 개발 라인 제공
    • 태그 참조:
      • 기능: 특정 커밋을 가리키는 고정 포인터
      • 역할: 릴리스 버전 등 중요한 시점 표시
  3. 작업 영역:
    • 작업 디렉토리(Working Directory):
      • 기능: 실제 파일을 편집하는 공간
      • 역할: 사용자가 직접 작업하는 프로젝트 파일 디렉토리
    • 스테이징 영역(Staging Area/Index):
      • 기능: 다음 커밋에 포함될 변경 사항 준비
      • 역할: 작업 디렉토리와 저장소 사이의 중간 영역으로 선택적 커밋 가능
    • 저장소(Repository):
      • 기능: 모든 객체와 참조 저장
      • 역할:.git 디렉토리에 저장되며 프로젝트의 전체 이력 보관
  4. 명령어 인터페이스:
    • 저수준(Plumbing) 명령어:
      • 기능: Git의 내부 작동에 접근
      • 역할: 저장소 내부 객체와 직접 상호작용
    • 고수준(Porcelain) 명령어:
      • 기능: 일반적인 버전 관리 작업 수행
      • 역할: 사용자 친화적인 인터페이스 제공

Git 아키텍처 다이어그램:

 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
[사용자 인터페이스]
       |
       v
[Git 명령어 (고수준/저수준)]
       |
       v
+-----------------+
|                 |
| [작업 디렉토리]  | <-----+
|                 |       |
+-----------------+       | 체크아웃
       |                  |
       | 추가(add)        |
       v                  |
+-----------------+       |
|                 |       |
| [스테이징 영역]  |       |
|                 |       |
+-----------------+       |
       |                  |
       | 커밋(commit)     |
       v                  |
+-----------------+       |
|                 |       |
|   [저장소]      | ------+
|   (.git)        |
+-----------------+
       |
       | 푸시/풀
       v
[원격 저장소]

장점과 단점

구분항목설명
장점분산 아키텍처중앙 서버 없이도 대부분의 작업 가능, 오프라인 작업 지원
브랜칭/병합 용이성가볍고 빠른 브랜치 생성 및 병합으로 비선형 개발 지원
속도로컬 연산으로 즉시 히스토리 조회
오픈 소스무료로 사용 가능하며 커뮤니티의 지속적인 개선과 지원
단점대용량 파일Git LFS 필요
학습 곡선CLI 및 개념 이해 필요.
권한 관리 제한세밀한 액세스 제어 기능이 제한적임
히스토리 크기전체 히스토리를 복제하므로 오래된 대형 프로젝트의 초기 클론 시간이 김
서브모듈 관리서브모듈 사용 시 복잡한 관리가 요구됨
빈 디렉토리 관리 불가빈 디렉토리를 추적할 수 없음

실무 적용 예시

적용 분야사용 사례설명
소프트웨어 개발오픈 소스 프로젝트Linux 커널, React, Angular 등 대부분의 오픈 소스 프로젝트에서 Git 사용
웹 개발프론트엔드/백엔드 코드 관리, 팀 협업, 배포 자동화
모바일 앱 개발iOS, Android 앱 코드 관리 및 버전 추적
게임 개발게임 소스 코드 관리(대용량 자산은 Git LFS로 관리)
DevOpsCI/CD 파이프라인Jenkins, GitHub Actions 등과 연동한 지속적 통합/배포
인프라 코드(IaC)Terraform, Ansible 등 인프라 코드 버전 관리
구성 관리서버, 네트워크 장비 등의 구성 파일 관리
컨테이너 이미지 관리Docker, Kubernetes 관련 설정 파일 관리
콘텐츠 관리기술 문서개발 문서, API 문서, 기술 매뉴얼 등 관리
웹사이트정적 사이트 생성기(Jekyll, Hugo 등)와 연동한 웹사이트 관리
데이터 분석Jupyter 노트북, R 스크립트 등 데이터 분석 코드 버전 관리
교육 자료강의 자료, 튜토리얼, 예제 코드 등 관리
기업 환경대기업 코드베이스Microsoft, Google, Amazon 등 대기업의 대규모 코드베이스 관리
금융/의료 산업규제가 엄격한 산업에서의 감사 추적 및 변경 관리
스타트업빠른 개발 주기와 협업을 위한 버전 관리
다국적 팀 협업지리적으로 분산된 팀의 효율적인 협업

실무에서 효과적으로 적용하기 위한 고려사항 및 주의할 점

영역고려사항설명
저장소 설계저장소 구조모노레포 vs 다중 저장소 전략 선택, 적절한 계층 구조 설계
무시 파일 설정.gitignore 파일을 통한 불필요한 파일 제외 설정
Git LFS 활용대용량 바이너리 파일 관리를 위한 Git LFS 도입 검토
서브모듈 관리외부 의존성 관리를 위한 서브모듈 전략 수립
브랜칭 전략브랜치 모델 선택프로젝트 특성에 맞는 GitFlow, GitHub Flow 등 선택
브랜치 명명 규칙기능, 버그 수정, 릴리스 등 목적별 명명 규칙 수립
병합 정책풀 리퀘스트, 코드 리뷰, 자동화된 테스트 통과 등 병합 조건 정의
브랜치 수명주기브랜치 생성, 활용, 병합, 삭제에 대한 라이프사이클 관리
커밋 관행커밋 메시지 형식명확하고 일관된 커밋 메시지 형식 정의 (예: Conventional Commits)
커밋 크기논리적 단위의 작은 커밋으로 변경 사항 관리
서명된 커밋보안 강화를 위한 GPG 서명 커밋 고려
히스토리 관리리베이스, 스쿼시 등을 활용한 깔끔한 커밋 히스토리 유지
이력 수정공개된 커밋 이력 수정 시 주의 (force push 제한)
팀 협업워크플로우 문서화팀 내 Git 사용 규칙 및 워크플로우 문서화
코드 리뷰 통합풀 리퀘스트를 통한 코드 리뷰 프로세스 정의
충돌 해결 책임병합 충돌 발생 시 해결 책임과 절차 명확화
지식 공유Git 모범 사례 및 팁 공유를 위한 내부 교육
자동화 및 통합CI/CD 연동Jenkins, GitHub Actions 등 CI/CD 도구와 연동
훅 스크립트pre-commit, post-receive 등 Git 훅을 활용한 자동화
이슈 트래커 연동JIRA, GitHub Issues 등 이슈 트래커와 연동
품질 관리 도구 연동코드 품질, 테스트 도구와 Git 워크플로우 통합
보안 및 백업액세스 관리저장소 접근 권한 및 보안 정책 수립
비밀 정보 관리비밀번호, API 키 등 민감 정보 관리 방안 마련
백업 전략저장소 정기 백업 및 재해 복구 계획 수립
감사 추적변경 이력 감사 및 규정 준수 방안 마련
성능 최적화대형 저장소 관리대규모 저장소의 성능 최적화 방안 (Git LFS, 얕은 클론 등)
히스토리 정리불필요한 대용량 파일 제거, 이력 압축 등
네트워크 효율성느린 네트워크 환경을 위한 최적화 (번들링, 압축 등)
캐싱 최적화로컬 캐시 활용으로 성능 향상

최적화하기 위한 고려사항 및 주의할 점

영역최적화 방안설명
저장소 구조저장소 분할너무 커진 저장소는 적절한 단위로 분할 고려
모노레포 도구대규모 모노레포의 경우 Git 확장 도구(예: Git VFS) 활용
대용량 파일 분리대용량 바이너리 파일은 Git LFS 또는 별도 관리
히스토리 관리불필요하게 오래된 이력은 정리 고려
클라이언트 최적화얕은 클론--depth 옵션으로 필요한 이력만 가져오기
부분 클론--filter=blob:none 등으로 필요한 부분만 클론
단일 브랜치 클론--single-branch 옵션으로 특정 브랜치만 클론
스파스 체크아웃대규모 저장소에서 필요한 디렉토리만 체크아웃
명령어 최적화로컬 캐싱 강화core.preloadindex=true, core.fscache=true 설정
압축 설정core.compression 레벨 조정으로 네트워크 효율성 향상
병렬 처리submodule.fetchJobs 등 병렬 처리 설정 활용
델타 압축 최적화pack.deltaCacheSize, pack.windowMemory 등 조정
서버 최적화서버 사양충분한 메모리, CPU, 디스크 I/O 확보
리포지토리 GCgit gc --aggressive 주기적 실행으로 저장 공간 최적화
참조 압축git pack-refs --all로 참조 파일 압축
네트워크 프로토콜Git 프로토콜 또는 SSH 사용으로 성능 향상
워크플로우 최적화작은 커밋대량의 변경을 작은 논리적 단위로 분할
정기적 병합장기 실행 브랜치는 정기적으로 메인 브랜치와 동기화
불필요 파일 제외효율적인.gitignore 설정으로 추적 대상 최소화
로컬 설정 활용프로젝트별 Git 구성으로 성능 최적화

최신 동향과 앞으로의 전망, 주목해야 할 기술들

구분주제항목설명
최신 동향Git과 AI 통합AI 기반 코드 리뷰인공지능을 활용한 코드 검토, 버그 감지, 최적화 제안 등이 Git 워크플로우에 통합되고 있음
GitOps 확산인프라 코드화인프라와 애플리케이션 배포를 Git 저장소를 통해 관리하는 GitOps 방식이 DevOps 표준으로 자리잡고 있음
협업 도구 강화실시간 협업원격/분산 작업 환경에 최적화된 실시간 코드 편집, 통합 커뮤니케이션 도구 등의 발전
보안 강화자동화된 보안사이버 위협 증가에 대응하여 Git 저장소의 보안 기능 강화, 취약점 스캐닝 자동화
대규모 저장소 최적화성능 개선대형 모노레포 관리를 위한 부분 클론, 스파스 체크아웃 등 성능 최적화 기술 발전
주목해야 할 기술스마트 자동화지능형 병합 도구머신러닝을 활용한 충돌 예측 및 자동 해결, 최적의 병합 전략 제안
Git 확장 기능커스텀 워크플로우프로젝트/팀 특성에 맞춘 확장 기능 및 자동화 워크플로우 개발 증가
지식 관리 통합문서화 자동화코드와 문서의 통합 관리, AI를 활용한 자동 문서화 기능
분산 작업 최적화하이브리드 작업원격/대면 작업을 효과적으로 지원하는 Git 기반 협업 도구 발전
블록체인 통합변경 불변성블록체인 기술을 활용한 커밋 이력의 불변성과 투명성 강화
전망개발 자동화AI 코딩 보조AI 코딩 도구와 Git 워크플로우의 통합으로 개발 자동화 가속화
생태계 통합개발 파이프라인Git을 중심으로 개발, 테스트, 배포, 모니터링 등 전체 파이프라인 통합
산업 특화 솔루션도메인별 워크플로우금융, 의료, 게임 개발 등 산업별 특화된 Git 워크플로우 및 도구 등장
교육 및 접근성진입장벽 낮추기Git 학습 곡선을 완화하기 위한 교육 도구 및 단순화된 인터페이스 발전
기업 채택 확대엔터프라이즈 기능대기업의 규제 및 규정 준수를 위한 엔터프라이즈급 Git 솔루션 확대

하위 주제로 분류한 추가 학습 내용

카테고리하위 주제간략한 설명
Git 기본객체 모델 이해블롭, 트리, 커밋, 태그 등 Git 객체와 그 관계에 대한 심화 학습
참조 시스템HEAD, 브랜치, 태그 등 Git 참조의 작동 방식과 관리
인덱스와 스테이징Git의 스테이징 영역 작동 원리와 효과적인 활용법
파일 추적 메커니즘Git의 파일 변경 감지 및 추적 메커니즘 이해
브랜칭 전략GitFlow기능, 릴리스, 핫픽스 브랜치를 활용한 구조화된 개발 워크플로우
GitHub Flow단순하고 지속적인 배포에 최적화된 브랜치 전략
GitLab Flow환경별 브랜치를 포함한 확장된 워크플로우
트렁크 기반 개발단일 메인 브랜치와 단기 기능 브랜치를 활용한 개발 방식
고급 Git 기술리베이스 마스터링대화형 리베이스, 스쿼시, 히스토리 재작성 등 고급 기법
서브모듈 관리다중 저장소 프로젝트에서 서브모듈 효과적 활용법
Git 훅 프로그래밍클라이언트/서버 측 Git 훅 개발 및 활용
저수준 명령어Git의 저수준(plumbing) 명령어를 활용한 고급 작업
성능 최적화대규모 저장소 관리대형 모노레포 관리 기법과 성능 최적화 전략
Git LFS 활용대용량 파일 효율적 관리를 위한 Git LFS 설정 및 활용
네트워크 최적화원격 작업 시 네트워크 성능 최적화 기법
저장소 정리 및 압축히스토리 정리, 가비지 컬렉션을 통한 최적화
협업 워크플로우풀 리퀘스트 관리효과적인 풀 리퀘스트 기반 코드 리뷰 프로세스
이슈 추적 통합Git과 이슈 트래커 연동을 통한 작업 관리
코드 리뷰 자동화자동화된 코드 검증 및 리뷰 시스템 구축
릴리스 관리체계적인 버전 관리와 릴리스 프로세스
DevOps 통합CI/CD 파이프라인Git과 CI/CD 도구 연동 및 자동화 파이프라인 구축
GitOps 구현Git을 중심으로 한 인프라 관리 및 배포 자동화
모니터링 통합Git 이벤트와 시스템 모니터링 통합
테스트 자동화커밋/병합 시 자동 테스트 구성 및 관리

추가로 알아야 하거나 학습해야 할 관련 분야

관련 분야학습 내용간략한 설명
DevOpsCI/CD 도구Jenkins, GitHub Actions, GitLab CI 등 Git과 연동되는 CI/CD 도구
인프라 코드화(IaC)Terraform, Ansible 등을 활용한 인프라 코드 버전 관리
컨테이너 오케스트레이션Docker, Kubernetes와 Git 기반 배포 전략
모니터링 및 로깅배포 및 변경 사항 추적을 위한 모니터링/로깅 시스템
프로그래밍 방법론애자일 개발Git 브랜칭 전략과 애자일 개발 방법론의 연계
TDD/BDD테스트 주도 개발과 Git 워크플로우 통합
클린 코드가독성과 유지보수성 높은 코드 작성 방법
리팩토링 기법코드 품질 향상을 위한 점진적 개선 방법
보안취약점 스캐닝Git 저장소의 코드 취약점 자동 검출 도구
비밀 정보 관리민감한 정보를 안전하게 관리하는 도구 및 기법
코드 서명커밋 서명을 통한 신원 확인 및 무결성 보장
접근 제어세밀한 권한 관리 및 보안 정책 설정
클라우드 컴퓨팅클라우드 네이티브 개발클라우드 환경에 최적화된 Git 워크플로우
서버리스 아키텍처서버리스 환경에서의 배포 자동화
멀티클라우드 전략여러 클라우드 환경에서의 일관된 배포 전략
클라우드 CI/CD클라우드 제공업체의 CI/CD 서비스와 Git 통합
협업 및 프로젝트 관리애자일 프로젝트 관리Git과 연동되는 애자일 도구(JIRA, Trello 등) 활용법
문서화 자동화코드와 문서의 동기화 및 자동 생성
지식 관리Wiki, 문서 시스템과 Git 저장소 연동
팀 커뮤니케이션Slack, Teams 등 협업 도구와 Git 통합
인공지능/자동화AI 코딩 지원GitHub Copilot 등 AI 코딩 도구와 Git 워크플로우 통합
코드 품질 자동화정적 분석 도구와 Git 훅 연동
자동 문서화AI를 활용한 코드 문서 자동 생성
작업 예측작업 진행 상황 및 완료 시간 예측 도구

용어 정리

용어설명
스냅샷특정 시점의 파일 상태를 저장한 것으로, Git은 변경 사항을 스냅샷 형태로 저장합니다.
블롭(Blob)Git 객체 중 하나로, 파일의 내용만을 저장하는 객체. 파일명이나 권한 등 메타데이터는 포함하지 않음
트리(Tree)Git 객체 중 하나로, 디렉토리 구조를 표현하며 블롭이나 다른 트리에 대한 참조를 저장
커밋(Commit)Git 객체 중 하나로, 프로젝트의 특정 시점 스냅샷과 메타데이터(작성자, 시간, 메시지 등)를 포함
태그(Tag)특정 커밋에 이름을 부여하여 중요한 시점(예: 릴리스 버전)을 표시하는 참조
HEAD현재 체크아웃된 브랜치나 커밋을 가리키는 특수 참조
스테이징 영역(Staging Area)작업 디렉토리와 저장소 사이의 중간 영역으로, 다음 커밋에 포함될 변경 사항 준비
리베이스(Rebase)한 브랜치의 변경 사항을 다른 브랜치 위에 재적용하는 작업
체리픽(Cherry-pick)특정 커밋의 변경 사항만 선택적으로 다른 브랜치에 적용하는 작업
포크(Fork)다른 사람의 저장소를 자신의 계정으로 복사하여 독립적으로 개발할 수 있게 하는 기능
풀 리퀘스트(Pull Request)변경 사항을 기여하고자 하는 대상 저장소에 병합을 요청하는 기능(GitHub 용어)
머지 리퀘스트(Merge Request)풀 리퀘스트와 동일한 개념이나 GitLab에서 사용하는 용어
훅(Hook)특정 Git 이벤트(커밋, 푸시 등) 전후에 자동으로 실행되는 스크립트
리프(Ref)커밋을 가리키는 참조(브랜치, 태그 등)
패스트 포워드(Fast-forward)직접적인 자손 커밋으로 병합할 때 브랜치 포인터만 이동시키는 간단한 병합 방식
깃플로우(GitFlow)기능, 릴리스, 핫픽스 등 목적별 브랜치를 활용하는 브랜칭 전략

참고 및 출처