이제까지 git을 통해서 파일들을 수정하고, 그것을 원격 저장소에 업데이트하는 과정을 살펴보았습니다. 여기에서 add, commit 등의 몇 가지 프로세스를 거치게 되는데 이 과정에서 git을 통해 관리되는 파일의 상태(status)에는 여러 가지 변화가 일어나게 됩니다. 이번 아티클에서는 이 파일들의 단계별 status를 살펴보고, 어떤 식으로 동작하는지를 확인해 보겠습니다.
우선 git에서 파일이 관리되는 status는 다음과 같이 총 4개가 있습니다. 이제 차근차근 이 각각의 스테이터스가 무엇을 의미하는지 살펴보겠습니다.
- 추적 안됨[untracked]
- 스테이지됨[staged]
- 수정 없음[unmodified]
- 수정함[modefied]
추적 안됨[untracked]은, 한 번도 커밋되지 않은 파일을 의미합니다. 예를 들어, 로컬 저장소에서 readme.txt라는 파일을 새로 생성하고 내용도 수정을 했는데 add 명령어를 통해 해당 파일을 등록하지 않은 경우라고 생각하면 됩니다. 이 상태의 파일은 add되지 않았기 때문에, 아무리 수정을 해도 반영되지 않습니다.
스테이지됨[staged]은, add 명령어를 실행해 파일을 git 스테이지에 등록한 상태를 의미합니다. 이 상태부터는 포괄적으로 추적됨[tracked]상태가 되는 것이라고 생각하면 됩니다. 이제 이 파일은 git으로 관리가 시작되는 것이죠. 물론, 아직 commit은 진행하지 않았습니다.
수정 없음[unmodified]는 어떤 상태일까요? '스테이지됨' 상태의 파일을 commit 하고 나면 바뀌는 상태입니다. 이제 스테이지에 있는 파일이 커밋되었으니, 해당 파일을 기준으로는 할 일이 끝난 것입니다. 이제 이 상태에서 push를 진행하게 되면, 해당 커밋은 다른 사용자도 업데이트할 수 있게 되는 것입니다.
수정함[modified]는, 말 그대로 파일의 수정이나 변화가 일어난 상태입니다. 위에서 우리가 readme.txt라는 파일을 commit 후 push를 진행해서 '수정 없음' 상태로 만들었죠? 그런데 업데이트가 필요해서, 우리의 로컬 저장소 상의 readme.txt를 고치게 되면 해당 파일은 '수정함[modified]' 상태가 됩니다. 우리가 아까 말했듯이 한 번 add와 commit 작업을 진행했기 때문에, 이 readme.txt는 추적상태가 되었기 때문에 파일에 변화가 생기면 이를 감지하여 수정되었음을 인지하게 되는 것입니다.
이제 위에서 '수정함' 상태의 파일을 다시 add하게 되면 '스테이지됨' 상태로 변하게 되는 것이고, 또 commit을 진행하면 '수정 없음' 상태가 됩니다. 이 과정이 반복되는 것이죠.
만일 중간에 새로운 파일 'index.html'이 추가되었다면? 이 파일은 처음 등장했고 한 번도 커밋이 이루어지지 않았기 때문에 '추적 안됨' 상태가 됩니다. 이 파일을 다시 add, commit을 진행하면 동일한 상태가 반복되는 것이죠.
조금 복잡한 것 같지만 차근차근 읽어보면 이해가 가실 것입니다. 이해를 돕기 위해 이 과정과 status를 도식화하여 살펴보겠습니다.
1. 아래와 같이 git init된 폴더에서, 처음으로 새 파일 두 개 [readme.txt] 와 [index.html]을 만들었습니다. 지금은 두 파일 모두 [추적 안됨] 상태입니다.
2. 이제 여기서 git add를 사용해 [readme.txt]와 [index.html]을 등록했습니다. 여기까지 진행했으면, 두 파일은 [스테이지됨] 상태로 변합니다.
3. 여기서 commit을 실행합니다. 이제 하나의 사진이 찍혀(스냅샷) 첫 번째 커밋이 만들어졌습니다. 이제 두 파일의 상태는 커밋이 완료되었으므로 [수정 없음] 상태가 되었습니다. 그리고 여기서 push까지 진행하면 해당 커밋은 원격 저장소에 저장됩니다.
4. 자, 이제 중요한 부분입니다. 우리는 3번까지 진행한 상태에서 "index.html"을 수정하고 "style.css"라는 파일을 새로 만들었습니다. 그럼 index.html의 경우 [수정됨] 상태가 됩니다. style.css는 어떤 상태일까요? 새로 만들어졌기 때문에, [추적 안됨] 상태가 됩니다.
5. 이제 변화가 생긴 파일이 뭐였죠? "readme.txt(수정본)"와 "style.css" 두 개입니다. 이 두 개의 파일을 add로 스테이지에 올려주고 커밋을 준비합시다. 이제 두 파일은 모두 [스테이지됨]이 됩니다.
6. 이제 해당 스테이지 상태에서 찰칵! 스냅샷을 또 찍습니다. commit을 실행하고, 새로운 커밋이 생성됩니다. 새로 생성된 커밋은 이전의 커밋 "기본 파일 생성"과 연결되는 히스토리를 남기게 됩니다. 당연히 파일들은 모두 [수정 없음] 상태로 변화합니다. 이제 새로운 커밋을 push해주면 원격 저장소에도 저장됩니다.
'Project Management > Git & Github' 카테고리의 다른 글
[Chapter 3] repository 협업(2) - branch 생성, commit in Sourcetree (0) | 2023.03.12 |
---|---|
[Chapter 3] repository 협업(1) - branch 개념 (0) | 2023.03.12 |
[Chapter 2.5] git의 기본 작동 원리 - stage, commit, 그리고 스냅샷 (0) | 2023.03.09 |
[Chapter 2] Sourcetree 처음 사용해보기 - repository 생성, origin과 master (0) | 2023.03.06 |
[Chapter 1] github 처음 사용해보기(4) - repository clone과 pull (0) | 2023.03.05 |