Git (2)

깨진알·2023년 11월 29일

Git

목록 보기
2/13

Git (2)

Repository와 Commit

  • 레포지토리 (repository)

저장소를 의미한다. 다시 말해 커밋이 저장되는 곳이라고 생각하면 된다.

  • 커밋 (commit)

프로젝트 디렉터리의 특정 모습을 하나의 버전으로 남기는 행위 또는 결과물이다.


repository 만들기

$ git init

현재 디렉터리를 Git이 관리하는 프로젝트 디렉터리(working directory)로 설정하고 그 안에 레포지토리(.git 디렉터리)를 생성한다.

첫 commit 해보기

처음 커밋을 할 때, Git에게 커밋한 사람을 알려줘야 한다.

$ git config user.name "이름"
$ git config user.email "이메일"

$ git commit -m "커밋에 대한 정보" # untracked 오류 발생

$ git add 파일이름
$ git commit -m "커밋에 대한 정보"
  • -m : 커밋에 메세지 남기기
  • untracked 오류 : Git에 의해 아직 추적되지 않은 상태를 의미한다. 즉, 버전 관리의 대상이 아님을 뜻한다.
  • add : 커밋할 파일을 미리 지정해 주어야 한다. 수정된 파일의 모습이 커밋에 포함될 것이라고 지정하는 것이다.
  • 커밋에 관한 주의사항
    - 처음으로 커밋을 하기 전 사용자의 이름과 이메일 주소를 설정해야 한다.
    - 커밋 메시지 남기기 (옵션 -m)
    - 커밋할 파일을 git add로 지정해주기

Git의 3가지 작업 영역

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

  • working directory : 작업을 하는 프로젝트 디렉터리를 의미한다.
  • staging area : git add를 한 파일들이 존재하는 영역이다. 커밋을 하게되면 staging area에 있는 파일들만 커밋에 반영된다.
  • repository : 변경 이력들이 저장되어 있는 영역이다. 즉, 커밋들이 저장되는 영역을 의미한다.

    working directory에서 작업 -> 작업할 파일들 git add -> 커밋하면 staging area에 있던 파일들의 모습이 마치 영화의 한 장면, 스냅샷(snapshot)처럼 이 레퍼지토리에 저장되는 것이다.

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

이번에는 working directory에서 A.txt 파일 내용에 Python~이라는 단어를 추가하였고, B.txt 파일 내용에 Morging!이라는 단어를 추가하였다. 그런데 git add B.txt만 실행해서 B.txt 파일만 staging area에 올렸으며, git commit -m "Ver_2"로 두 번째 커밋을 진행했다.

이전 그림과 다른 점은 A.txt는 staging area에 올리지 않고, B.txt만 staging area에 올렸다는 점이다. Ver_2 커밋을 보면 A.txt는 수정하기 이전의 모습이 Ver_2 커밋에 반영되었고, B.txt는 수정한 이후의 모습이 Ver_2 커밋에 반영되었다. A.txt, B.txt 둘다 working directory에서 수정했다는 사실은 같지만, staging area에 올렸는지 여부에 따라 커밋에 반영되는지가 달라지게 되는 것이다.

그렇다면 staging area는 굳이 왜 필요한가? working directory에서 작업을 하고 git add할 필요없이 바로 커밋해버리는 구조가 더 편하다고 생각할 수 있다. 하지만 방금처럼 A.txtB.txt 파일을 둘다 수정했더라도 두 파일 모두 최신 모습을 다음 커밋에 반영하고 싶지 않을 수가 있다. 만약 staging area가 없다면 원하는 것들만 선별적으로 커밋에 반영할 수 없게 된다. 즉, 세밀한 버전 관리를 할 수 없게 되는 것이다.

참고로 working directory는 working tree라고 하기도 하고, staging area는 index라고 할 때도 있다.


git add 더 자세히 알아보기

$ git status

Git이 인식하고 있는 프로젝트 디렉터리의 현재 상태를 보여준다. 문제가 발생했을 때 현재 상태를 파악하기 위해 활용된다.

$ git add .

변경된 모든 상태를 staging area에 보내줄 때 사용된다.


Git이 보는 파일의 4가지 상태

Git으로 관리되는 파일은 일종의 '상태(status)'라는 걸 가지게 된다. Git에서 파일들은 크게 2가지 상태를 가진다.

  • Untracked 상태
  • Tracked 상태 (Tracked 상태는 다시 3가지 상태로 나뉜다.)
    - Staged 상태
    - Unmodified 상태
    - Modified 상태

1. Untracked 상태

Untracked는 '추적되지 않고 있는'이라는 뜻이다. 이 상태는 파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않은 상태를 뜻한다. 예를 들어, 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 이 상태이다.

2. Tracked 상태

파일이 Git에 의해 변동사항이 추적되고 있는 상태이다.

2-1. Staged 상태

파일의 내용이 수정되고나서, staging area에 올라와있는 상태를 Staged(staging area에 올려진) 상태라고 한다. 새로 생성한 파일에 내용을 쓰고 git add를 해주거나 한 번이라도 커밋에 포함되었던 파일이라도 내용을 수정하고 git add를 해주면 이 상태이다.

2-2. Unmodified 상태

현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전형 바뀐 게 없는 상태면 그 파일은 Unmodified(수정되지 않은, 변한 게 없는) 상태이다. 커밋을 하고 난 직후에는 working directory 안의 모든 파일들이 이 상태가 된다.

2-3. Modified 상태

최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태면 그 파일은 Modified(수정된) 상태이다.

3. 상태 전환

  • Add the file : Untracked 상태의 파일을 처음으로 git add 해주면 Staged 상태가 된다,
  • Edit the file : 최신 커밋과 비교했을 때 차이가 없는 Unmodified 상태의 파일의 내용을 수정하면 Modified 상태가 된다.
  • Stage the file : Modified 상태의 파일을 git add 해주면 Staged 상태가 된다.
  • Remove the file : 파일을 삭제하면 당연히 Git에서 인식하지 않게 된다.
  • Commit : 커밋을 하면 staging area에 있던 파일들이 커밋에 반영되고, 이제 모든 파일들은 최신 커밋과 차이가 없게 되니까 Unmodified 상태가 된다.

git add 취소하기

$ git reset 파일이름

staging area에서 파일을 제거하는 커맨드이다. 하지만 변경된 새 모습은 working directory에 남아있으므로 크게 걱정할 것 없다.

특정 git 커맨드의 사용법을 알고 싶다면?

새롭게 커맨드를 배울 때마다 그 의미나 사용법을 좀더 자세히 알고 싶다면 git help 커맨드를 입력하면 된다.

$ git help add
$ man git-add

git help 외에 man git-처럼 입력해도 똑같이 출력된다. 커맨드 입력 후 화면에서 빠져 나갈 때는 q를 입력하면 된다.

profile
프론트엔드 지식으로 가득찰 때까지

0개의 댓글