[Git] Git 구조

2023. 3. 18. 10:15· Git
목차
  1. 1. Git vs SVN
  2. 2. Git의 공간
  3. 3. Git HEAD
반응형

제대로 파는 Git & GitHub - by 얄코

 

이 포스팅에서 작성하는 내용은 제대로 파는 Git & GitHub - by 얄코 에서 발췌하였습니다.

 

https://inf.run/KAyf

 

제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의

코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 Git 박사로 들어주는 끝판왕 강좌!, - 강의 소개 | 인프런

www.inflearn.com

 


1. Git vs SVN

  Git SVN
파일 관리 방식 Snapshot Delta 
서버 운영 방식 분산 버전 관리 중앙집중식 버전 관리

 

1.1) Delta vs Snapshot

- Delta 방식

위의 그림처럼, 변경된 내용에 대해서만 version에 포함된다.

 

예를 들어, version 3의 파일들을 확인해보자

File A : 가장 최근에 변경된 version 2로 가서 File A를 가져온다.

File B : 가장 최근에 변경된. 즉, version 1로 가서 File B를 가져온다.

File C : version 3에서 File C를 가져온다.

 

즉, 최근에 변경된 내역으로 가서 파일을 가져와야 한다.

이 방식도 효율적이지만, commit이 상당히 많은 경우에는 속도가 느려질 수 있다.

 

 

 

- Snapshot 방식

위의 그림처럼, 모든 버전에서 모든 파일들을 가지고 있다.

 

예를 들어, version 3의 파일들을 확인해보자

단순히, version3에 있는 세 파일을 가져오면 된다.

 

이렇게 되면 각 버전마다의 많은 용량을 차지할거라고 생각하지만, 효율적인 방식으로 저장한다고 한다.

즉, version에 해당하는 파일들을 이전 커밋 내역들을 볼 필요 없이 가져올 수 있다.

 

 

 

 

1.2) 중앙집중식 버전 관리 vs 분산 버전 관리

- 중앙집중식 버전 관리

 

위의 그림처럼, 버전 관리를 중앙 서버에서만 한다.

즉, 서버에서 의존관리를 하며 중앙 서버에 의존한다.

 

 

 

- 분산 버전 관리

 

위의 그림처럼, 서버에서도 하고 로컬 저장소에서도 버전관리를 진행한다.

즉, 중앙집중식 서버관리가 로컬을 포함해 여러 개가 있다고 생각하면 된다.

그리하여, svn에서는 commit이 서버로 넣는 행위지만 git에서는 commit 후 따로 push로 원격 저장소에 따로 넣어줘야 한다.

 

장점

1. 분산관리로 인해 장애 대응이 수월하다.

2. 로컬에 한 번 가져오면 인터넷이 없어도 버전관리가 가능하며 그만큼 빠르다.

 

 

 

2. Git의 공간

Git은 아래의 3가지 공간으로 이루어져있다.

Working Directory repository에서 수정한 파일이나 새로 추가된 파일들, ignore된 파일들이 이 공간에 있는다.
- untracked : Add된 적 없는 파일 or ignore 된 파일
- tracked : Add 된 적 있고, 변경내역이 생긴 파일
Staging Area git add 로 파일을 커밋할 준비를 하면, 이 공간에 있는다.
커밋을 위해 Working Directory와 구분하는 공간이라고 보면 된다.
Repository
(= .git directory)
Staging Area에서 commit 하면, 이 공간에 있는다.
  • git restore [파일 명] : working Directory 에서 파일을 제거
    해당 파일의 수정 내역 초기화
  • git restore --staged [파일 명] : Staging Area -> working Directory 로 파일을 이동. (잘못 add 한 파일을 다시 복구)
    = git reset HEAD [파일명]

 

위의 3가지 공간을 이용해 reset을 할 수 있다.

  • --soft : 그간의 수정내역들이 repository 에서 Stagina Area로 이동한다.
  • (default) --mixed : 그간의 수정내역들이 repository 에서 Working Directory로 이동한다.
  • --hard : repository의 버전을 덮어씌움. (기존에 수정하던 내역 남지 않음)

 

 

3. Git HEAD

현재 속한 브랜치의 최신 커밋 시점

  • git switch 명령어를 이용해 브랜치를 변경하는 경우, 자동으로 각 브랜치의 HEAD로 이동한다.

 

Git checkout

  • checkout 을 이용해 시간을 이동할 수 있다. 
    (reset, revert는 앞의 커밋내역을 날리는 반면, checkout은 날리지 않고 시간 이동만 한다는 개념이다.)
  • 시간을 이동하면서 임의의 가상 브랜치를 만들어 이동하며, 여기서 브랜치를 만들어 다시 가지를 뻗을 수 있다. 
    다른 브랜치로 이동할 땐, switch를 이용해서 복귀가능하다.
  • git checkout HEAD^ : HEAD에서 1커밋 이전으로 이동
    • ^ or ~의 갯수만큼 이전으로 이동한다. 
      ex) git checkout HEAD~5 : HEAD로 부터 5 커밋 이전으로 디오
    • git checkout - : 시간을 1 커밋 되돌린다.

 

반응형

'Git' 카테고리의 다른 글

[Git] Review Comment Pending  (0) 2023.05.28
[Git] branch, log, hooks  (0) 2023.03.19
[Git] clean, restore, reflog, tag  (0) 2023.03.19
[Git] Git fetch pull, config, hunk, stash  (0) 2023.03.19
[Git] Git 기초  (0) 2023.03.17
  1. 1. Git vs SVN
  2. 2. Git의 공간
  3. 3. Git HEAD
'Git' 카테고리의 다른 글
  • [Git] branch, log, hooks
  • [Git] clean, restore, reflog, tag
  • [Git] Git fetch pull, config, hunk, stash
  • [Git] Git 기초
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 코테공부
  • JPA
  • 코틀린
  • MongoDB 공부
  • 이펙티브자바
  • Oracle
  • 더 자바 Java 8
  • 자기공부
  • Effective Java
  • 이펙티브 자바
  • 코테 공부
  • JPA 공부
  • 전산회계 2급 준비
  • 자기 개발
  • 자바 공부
  • 알고리즘 공부
  • 자바 테스팅 프레임워크
  • MongoDB with Node.js
  • 자기개발
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 자바공부
  • Java to Kotlin
  • MongoDB 기초부터 실무까지
  • 자바 개발자를 위한 코틀린 입문
  • 프로젝트로 배우는 Vue.js 3
  • vue3 공부
  • 알고리즘공부
  • junit5
  • 자기 공부
  • java 8

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[Git] Git 구조
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.