[Git] git이 관리하는 세개의 공간 - Working Directory, Stage, Repository and Commit

miyeon·2023년 3월 21일
0

Git

목록 보기
2/6
post-thumbnail

Git

  • 깃은 버전을 관리하기 위한 도구
    • 버전 = 변경사항 = 유의미한 변화가 결과물로 나온 것 = 커밋(commit)

깃이 없으면?

  • 변경 내역 확인이 어렵다.
  • 작업을 되돌리기가 어렵다.
  • 협력하기 어렵다.

깃은

  • 변경 내역들을 기억하며
  • 필요하다면 작업을 되돌리며
  • 여러명의 코드를 쉽게 나누고 합치며

Git이 관리하는 세 개의 공간

깃은 VCS의 특성 상 저장 공간을 논리적으로 분할한다. 크게 아래와 같이 3가지로 나눈다.

  • 작업 공간 (Working Directory)
  • 임시 저장 공간 (Stage)
  • 실제로 저장하는 공간 (Repository)

1. Working Directory

  • 사용자의 작업 공간으로써, 로컬 저장소(예: .git 디렉토리)에 접근할 수 있으며 실제 파일을 수정하거나 생성하는 공간이다.
  • 현재 작업중인 소스코드들을 담고 있으며, 운영체제도 워킹 디렉토리 내부의 파일들만 접근하거나 수정할 수 있다.
  • 작업 폴더에서 .git 디렉토리를 제외한 나머지 부분
  • 워킹 디렉토리에서는 파일들을 추척(tracked)/비추척(untracked) 상태로 구분한다.
    • untracked 상태
      • 저장소 내에서 새로 만들어진 모든 파일들은 untracked 상태로 시작한다.
      • untracked 상태인 저장소 내의 파일들은 git이 코드 변경 이력을 추적하지 않는다.
    • tracked 상태
      • tracked 상태의 파일들은 git에 의해서 파일의 변경 이력이 추적된다.
      • 모든 파일들의 변경 이력을 추적할 경우에는 시스템의 부하가 커지게 된다. 따라서 git에서는 요청받은 파일들만 변경 이력을 추적한다.
      • 명령어 : $ git add <file_name>
        위 명령어를 이용하면 파일을 tracked 상태로 등록한다. 👉 즉, 파일을 stage 영역으로 등록시킨다. (파일을 커밋하기 위해선 등록이 필수적)

2. Stage

  • 스테이지는 워킹 디렉토리에서 제출된 tracked 상태의 파일들을 관리 및 임시로 저장하는 공간이다.
    • 임시로 저장하는 공간이란?
      • Working Directory 와 Repository 사이의 임시 공간이다.
      • Repository 에서는 스테이지 영역에서의 파일 내용을 기반으로 변경된 차이점 만을 기록한다.
  • 스테이지 영역에서는 파일의 내용을 직접 가지고 있는 것이 아닌, 커밋하려는 파일의 추적 상태 정보들만 기록한다.
  • 스테이지가 만들어진 이유는 커밋을 빠르게 처리하기 위해서이다.
  • 스테이지 내의 파일들은 stage/unstage 상태로 구분된다.
  • 스테이지 상태 확인 명령어 : $ git status or $ git ls-files --stage

3. Repository

  • Git은 작성한 소스코드 파일의 모든 변경 사항을 관리하며, 파일들의 변경 내역을 저장소(Repository)에 저장한다. 이러한 저장소는 크게 로컬 저장소와 원격 저장소로 나누어진다.

  • 깃 저장소의 내부 구조

    • 숨겨진 폴더(.git)이 존재하며, 해당 폴더에서 버전 관리 시스템(VCS)에 필요한 파일 변경 이력을 기록한다.
    • $ git init 명령어로 생성되는 .git 폴더가 로컬 저장소이다.
    • .git 디렉토리가 로컬 저장소에 해당한다.
  • 깃 초기화

    • 깃 저장소를 생성한다는 의미이다.
    • 즉 이미 존재하는 폴더에 초기화 명령을 사용하여 VCS 관리를 위한 숨겨진 영역 (.git)을 생성하는 작업을 의미한다.
    • 초기화 명령어 : $ git init <directory_path>
      • 저장소로 사용할 디렉토리의 경로를 입력하지 않을 시, 현재 작업 중인 디렉토리를 저장소로 초기화 한다.
      • $ git init 명령어는 기본적으로 로컬 저장소를 생성하는 명령어 이다.

Commit

  • 깃이 코드의 변화를 기록하는 것
  • 코드의 의미있는 변경 작업들을 저장소에 기록하는 동작
  • 깃은 코드의 변경 이력과 변경 시점을 커밋으로 기록한다.

커밋 전 선행 작업

  • $ git add 명령어를 통해서 새로 생성한 파일이나 변경한 파일을 스테이지 영역으로 등록한다.
  • 커밋을 하기 위해선 반드시 스테이지 영역으로 등록한 파일에 새로운 변경 사항이 있어야 한다.
  • 변경 사항이 없거나, 파일을 수정했어도 스테이지 영역으로 등록하지 않은 경우 커밋을 할 수 없다.

커밋 명령어

  • $ git commit
  • 파일 등록과 커밋을 동시에 하는 방법 : $ git commit -a
  • 커밋과 메세지 입력 동시에 하는 방법 : $ git commit --m"commit_message"
  • 커밋메세지 수정하는 방법 : $ git commit --amend

커밋의 로그 기록

  • 로그 확인 명령어 : $ git log
  • 로그 기록은 최신 커밋 기록부터 내림차순으로 정렬한다.


참고 📝

profile
내가 보려고 기록하는 블로그

0개의 댓글