커밋(commit)

프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위 & 결과물

레포지토리(repository)

커밋이 저장되는 곳

레포지토리 만들기

$ git init

.git이라는 디렉토리가 생긴걸 확인 할 수 있는데 이게 바로 레포지토리이다. 여기서 git이 어떤 복잡한 작업을 함으로써 버전관리를 할 수 있다.

커밋하기

처음 커밋을 할 때엔 꼭 해야하는 것이 있다. 깃에게 commit한 사람을 알려주는 것이다. 그래야 나중에 누가 커밋햇는지 알 수 있다.

$ git config user.name "사용자 이름"

$ git config user.email "사용자 이메일주소"

$ git add 파일이름

$ git commit -m "남길 메세지"
  • config : 설정하다, 구성하다.
  • commit : 행하다, 기록하다.

git add를 하지 않고 commit을 하면 화면과 같은 error가 발생한다.
root-commit 첫번째 커밋이라는 뜻, 그리고 그 옆에는 내가 남긴 메세지(create ~)가 보인다.
2개의 파일이 변경됐고,
calcul.py의 6줄과 license의 1줄을 합쳐 총 7줄의 내용이 추가 됐다는 뜻이다.

+여담

git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작한다.

  1. working directory = working tree
  2. staging area = index
  3. repository

첫번째 작업 영역인 working directory는 작업을 하는 프로젝트 디렉토리를 말한다. 위에 상황에선 MathTool 디렉토리가 working directory가 된다.

두번째 작업 영역인 staging area는 git add를 한 파일들이 존재하는 영역이다. 커밋을 하게 되면 staging area에 있는 파일들만 커밋에 반영된다.

세번째 작업 영역인 repository는 working directory의 변경 이력들이 저장되어 있는 영역이다. 커밋들이 저장되는 영역이라는 뜻인데 풀어서 이야기 해보면

  • working direcrory에서 무언가 작업을 하고,
  • 작업한 파일들을 git add 해주고,
  • 커밋을 하면 staging area에 있던 파일들의 모습이 마치 영화의 한 장면, 스냅샷(snapshot)처럼 이 repository에 저장된다.

  1. working directory에서 A.txt 파일과 B.txt 파일을 작성하고
  2. git add A.txt와 git add B.txt를 실행해서 A.txt, B.txt 둘다 staging area에 올렸다.
  3. 그 다음 git commit -m "Ver_1"를 실행해서 staging area에 있는 파일들을 가져와 커밋으로 남겼다.

  1. working directory에서 A.txt 파일 내용에 Python~ 이라는 단어를 추가, B.txt 파일 내용에 Morning이라는 단어를 추가
  2. 그런데 이번에는 git add B.txt만 실행해서 B.txt파일만 staging area에 올렸다
  3. 그 다음 git commit -m "Ver_2"로 두번째 커밋을 했다.

이전 그림과 다른 점은 A.txt는 staging area에 올리지 않고 B.txt만 staging area에 올렸다는 점인데 지금 레포지토리의 결과는

  • A.txt는 staging area에 있던 모습, 수정하기 이전의 모습이 Ver_2에 반영
  • B.txt는 staging area에 있던 모습, 하지만 A.txt와는 달리 수정한 이후의 모습이 Ver_2 커밋에 반영되었다.

A와 B 둘 다 working directory에서 수정했다는 사실은 같지만, staging area에 올렸는지 여부에 따라 그 최신 모습이 커밋에 반영되는지 달라지는 것이다. 

'코린이 개념잡기 > GIT' 카테고리의 다른 글

push와 pull  (0) 2024.12.08
staging area에서 파일 제거하기  (0) 2024.12.08
파일의 4가지 상태  (0) 2024.12.08
git status  (0) 2024.12.08
GIT이란  (1) 2024.02.02

+ Recent posts