(5) Git add 와 status

반응형

 

git을 사용하여 계산기 프로그램을 만드는 프로젝트 실습

 

이전글에서 계산기와 라이센스 2개의 디렉토리를 생성하고 커밋(commit)을 직접 해보았다.

추가적으로 git에서 add 명령어 사용할 때 몇 가지 알아가고자 한다.

 

git add

우선 calculator.py와 Lisence.txt 파일을 각각 수정을 해보았다.

딱히 뭐 중요한 코드를 작성한 것이 아닌 #계산기, #라이센스 라는 문구를 추가했다.

 

계산기.py - git add

 

우리가 git add를 해주는건 어떤 의미가 있었다 했을까?

- 변경된 내용이 커밋(commit)에 반영 될 수 있도록 커밋 할 대상으로 지정해준다.

- 해당 파일을 스테이징 에어리어(staging area)에 옳기는 것이다.

 

▼ 현재 상황

계산기와 라이센스 파일 두개를 수정했지만 add는 계산기 파일만 해주었다.

그렇기 때문에 계산기 파일만 스테이징 에어리어에 새로운 모습으로 있기에 

계산기 파일은 '#계산기' 라는 문구가 추가된 새로운 모습으로,

라이센스는 '#라이센스'라는 문구가 추가되기 이전 모습 그대로 커밋에 반영 될 것이다.

 

한번 확인해보자.

 

git add (calculator.py)

 

git status : 깃이 인식하고 있는 프로젝트 디렉토리의 현재 상태를 보여준다.

 

상태를 확인하기위해 내용을 해석해보자

 

지금 이 결과를 자세히 살펴보자면 크게 두가지가있는데

첫 번째는 changes to be committed 라고 되어있다.

이 말은 커밋에 반영될 변경 사항을 나타낸다. (git add를 해주었던 caclulator.py 파일이 보인다.)

 

두 번째는 changes not staged for commit 라고 되어있다.

여기서 stage는 파일을 스테이징 에어리어에 추가하는 동작이라고 설명하였는데

변경 사항은 있었지만 git add를 해주지 않아서 " not staged " 스테이징 에어리어에 추가되지 않는 파일을 말한다.

(git add를 해주지 않았던 License 파일이 보인다.)

 

즉 이상태로 커밋을 한다면 계산기 파일은 내용이 추가된 새 모습대로,

라이센스 파일은 추가되기 이전 모습으로 커밋에 반영 된다.

 

git add (calculator.py + License)

▼ 이제 License도 스테이징 에어리어에 추가 (= add ) 해보자.

 

 

git status로 상태를 확인해보면 라이센스 파일도 스테이징 에어리어에 잘 추가 되어있는 것을 볼 수있다.

 

파일을 여러가지 수정을 했는데  어떤 것만 git add를 해주고 어떤 파일을 안 해주면

차후 버전관리에 문제가 생기므로 커밋을 하기전에 status 를 사용하여

스테이징 에어리어에 수정한 파일들이 다 들어있는지 확인해보는 습관도 길들여야 할 필요가 있다.

 

 

git add Directory

▼ 이번에는 파일이아닌 디렉토리를 추가하는데,

calculator.py 파일에 코드에 관한 회의 내용을 담을 디렉토리를 만들어보겠다.

 

▷ mkdir meeting-log 
▷ cd meeting-log
▷ touch day1
▷ touch day2
▷ cd ..

※ 해당 명령어가 기억이 나지 않는다면 레포지토리 생성 글에서 명령어 사이트 참고하자

 

 

방금 추가한 meeting-log 디렉토리도 커밋에 반영 하고자 할경우,

그냥 git add한 다음 한칸 뜨우고 meeting-log/라고 써주면 된다.

 

git add meeting-log/

 

git status로 확인해보면 그 디렉토리 안에있는 모든 파일이 스테이징 에어리어에 추가되었다.

 

 

 

우리가 개발을 하다보면 파일을 여러 개 수정하고 커밋 해야 될 때가 많을 것이다.

그럴 때마다 수정한 모든 파일에 대해서 git add를 해야하지만 여러번 해야하니 불편할 것이다.

해결 방법을 알아보자.

 

git add .

변경 사항이 있는 모든 파일을 한번에 스테이징 에어리어에 추가하는 방법을 사용해야한다.

주석에 아무거나 추가해서 변경사항을 만들어보자
변경사항이 있는 파일이 아직 스테이징 에어리어에 추가가 되어있지 않다고 나온다.

 

이 상태에서 우리는 스테이징 에어리어에 추가하기위해 git add를 두 번 사용했었다

 

git add 에서 뒤에 ( . ) 점을 붙여 실행해보자.

 

이 ( . ) 점은 현재 프로젝트 디렉토리 내에서 변경 사항이 생긴 모든 파일들을

스테이징 에어리어에 추가한다 라는 뜻이다.

 

변경 사항이있던 계산기 파일과 라이센스 파일이 git add. 으로 인해

스테이징 에어리어에 한번에 추가 되었다는 것을 볼 수있다.

 

 

커밋에 특정 파일들만 변경된 새 모습으로 반영 하고싶다면 ▶ git add (한번씩)
수정한 파일 전부를 커밋에 반영 하고싶다면 ▶ git add . (점 붙여서)

 

▼ 마무리 commit

 

git status

작업 영역과 관련해서 Git으로 관리되는 파일은 일종의 '상태(status)'라는 걸 가진다.

일단 Git에서 파일들은 크게 다음 2가지 상태를 가진다.

  • Untracked 상태
  • Tracked 상태

그리고 Tracked 상태는 다시 아래와 같은 3가지 상태를 가진다.

 

  • Staged 상태
  • Unmodified 상태
  • Modified 상태

1. Untracked 상태
Untracked는 '추적되지 않고 있는'이라는 뜻이며

이 상태는 파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않는 상태를 뜻한다.

예를 들어, 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 언트랙 상태이다.

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

이 상태는 다시 그 특성에 따라 3가지 상태(staged,unmodified,modified) 로 나뉜다.

(1) Staged 상태
파일의 내용이 수정되고나서, staging area에 올라와있는 상태를 

Staged(스테이징된, stage area에 올려진) 상태이며
새로 생성한 파일에 내용을 쓰고 git add를 해주거나
한 번이라도 커밋에 포함됐었던 파일이라도 내용을 수정하고 git add를 해주면 스테이지 상태이다.

(2) Unmodified 상태
현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태면 

그 파일은 Unmodified(수정되지 않은, 변한 게 없는) 상태이다.

커밋을 하고 난 직후에는 working directory 안의 모든 파일들이 수정되지 않은 상태가 된다.

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

 

이렇게 Git에서 파일은 매 순간 4가지 상태 중 하나의 상태에 있게되며. 이 내용을 그림으로 정리하면 아래와 같다.

 

  • 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 상태
반응형