본문 바로가기
책 읽기/Pro Git 2판

Git 의 Lifecycle 과 IntelliJ IDEA, CLI(Command Line Interface)에서 살펴보기

by 개발왕루피 2020. 1. 12.

버전 관리 (Version Control System)

  • 로컬 버전 관리 (Local VCS)
  • 중앙집중식 버전 관리 (Centralized VCS) - 파일이 서버에 있고, 서버에서 동작이 이루어짐
  • 분산 버전 관리 시스템 (Decentralized VCS) - 파일이 로컬에 있고, 로컬에서 동작이 이루어짐

Git 의 특징

  • 파일이 달라지지 않으면 관심이 없음
  • 이전 상태에 대한 링크만 저장함
  • 데이터를 스냅샷의 스트림 처럼 취급함

Git 의 무결성

  • 데이터를 저장하기 이전에 Checksum 을 구함
    • 이를 통해 데이터를 관리
    • 필수 매우 중요한 것임
    • 이게 없으면 파일, 디렉터리 변경이 불가
  • 체크섬은 SHA-1 해시로 만들어짐
    • 40자, 16진수 문자열 <= 파일 이름, 파일 내용, 디렉터리 구조에 대한 정보가 담겨 있음
  • Git 으로 어떤 동작을 해도 데이터가 추가됨
    • 파일을 삭제해도, 변경해도, 라인을 삭제해도 모든 동작은 Git 에 데이터를 추가하는 행위

Git 의 세가지 상태 - Committed, Modified, Staged

  1. Committed (Repository)
    • 데이터가 로컬 데이터베이스에 저장된 상태
  2. Modified (Working Directory)
    • 현재 상태, 수정/생성/미변경된 파일들이 공존하는 상태 (미변경된 파일은 관심이 없음)
  3. Staged (Staging Area)
    • 커밋하기 직전의 상태

cf. Untracked - Git 프로젝트의 하위 디렉터리에 존재하지만 Git 관심 영역에 벗어나 있는 상태, 즉 위의 세가지 상태는 모두 Tracked 상태에 있는 것

Git 으로 하는 일

위의 세가지 상태에 있는 파일들(Tracked) 을 관리함

  1. Working Directory 에서 파일을 수정
    • 파일들의 위치 - Working Directory
    • 파일의 상태 변화 - 무관심 -> Modified
  2. Staging Area 에 파일을 Stage 하여 Commit 할 스냅샷을 만듦
    • 파일들의 위치 - Working Directory -> Staging Area
    • 파일의 상태 변화 - Modified -> Staged
  3. 스냅샷을 Commit 하여 로컬 Repository 에 저장
    • 파일들의 위치 - Staging Area -> Repository
    • 파일의 상태 변화 - Staged -> Commit

Git 의 파일 상태 및 Life Cycle

직접 그린 그림, 퍼가는 것은 환영하지만 출처를 남겨주세요.

위 그림에서 파일 추가 및 파일 삭제는 Git 의 관점에서의 삭제이다. 디렉터리 내에서는 파일이 항상 존재한다.

Tracked 에서 Untracked 상태로 변경되는 것이 파일 삭제,

Untracked 에서 Tracked 상태로 변경되는 것이 파일 추가이다.

IntelliJ 에서는 위의 Life Cycle 이 어떻게 표시될까?

상태와 클래스 명을 동일하게 해두었다.

Intellij 에서 Git 상태를 한 눈에 보여주기 위해 파일명을 색깔로 구분하여 보여준다.

위 캡쳐를 찍을 때 생각을 못했는데, 삭제되면 Intellij 내장 VCS 기능에서 회색으로 보여준다. (프로젝트 디렉터리 구조상에서는 보이지 않는다. 이 경우는 디스크에서 파일이 삭제된 경우, 라이프 사이클 그림에서 말하는 Untracked 상태에서 Tracked 상태로 변경되는 경우가 모두 포함된다. 하지만 후자의 경우 프로젝트 디렉터리 구조에서는 빨간색으로 파일명이 변경될 것으로 추측할 수 있을 것 같다. 혹시 해보신 분 계시면 댓글로 부탁드립니다.. ㅎㅎ)

그렇다면 git CLI 에서는 어떻게 확인할 수 있을까?

CLI 도 친절하게 영역 나누어서, 색깔을 구분해서, 앞에 태그를 달아 보여준다.

Untracked 파일은 git 이 모르고 있기 때문에 앞에 태그(deleted, new file, modifed 를 태그라고 칭했다.)가 없다.

위의 두 영역은 Tracked 된 파일들을 구분해서 보여주고 있다.

맨 위가 Changes to be committed, 즉 '변경사항들이 커밋이 되어야 한다.' 라는 말로 보아 Staged 상태의 파일들(Staging Area)을 보여준다. 이 파일들을 git commit 명령어를 통해 메시지를 작성하면 git 의 데이터베이스에 저장되면서 repository 로 이동된다.

그 아래는 Staged 가 되지 않은 상태의 파일들(Working Directory)을 보여준다. 맨 위의 영역 (Changes to be committed) 에 있는 파일들은 git add [파일명] 으로 staging area 로 옮길 수 있는 파일들이다.

댓글