지난번 git의 구조에 이어 git의 파일 상태에 대해서 알아보도록 하겠습니다. 

git의 구조에 대해 궁금하신 분들은 아래 페이지 참조 부탁드립니다.

2022.10.04 - [프로그래밍/GIT] - (1-5) git 버전 관리 - git의 원리(git의 구조)

 

 

 

 

git의 파일상태


 git에서 버전을 만들 때 가장 중요한 것이 무엇일까요? 최신 버전과 현재 버전의 차이를 아는 것이겠죠? 동일한 파일의 내용이 변경되었는지, 새로운 파일이 추가된 것은 없는지, 추가적으로 어떤 파일을 새로운 버전으로 등록할 것인지...

 이러한 내용을 파악하기 위해 git에서는 파일의 상태를 5가지로 구분하여 정의합니다.

1) Tracked 

2) Untracked

3) Modified

4) Unmodified

5) Staged

 

 각각의 파일 상태에 대해 정의하고 어떤 식으로 해당 상태가 생성되는지 예시를 통해 파일 상태를 설명드리겠습니다. 

 

 

 

 

1) Tracked

 Tracked는 말 그대로 파일이 추적되고 있는 상황입니다. 이전에 커밋을 통해 버전이 생성되면, git은 새로운 변경사항에 대해서 대응하기 위해 최신 버전의 파일 상태를 알고 있습니다.  따라서 추적되는 파일은 수정되었는지, 수정이 되지 않았는지 git에서 알게 되는데 수정된 상태를 modified, 수정된 내용이 없는 상태를 Untracked라고 합니다. 

 

 먼저 Working Tree에서 특정 버전을 생성함으로써, Unmodified 한 파일 상태에 대해 알아보겠습니다. 

(git commit -ma C.txt에서 -a 옵션은 git add을 commit 명령어에서 바로 사용하겠다는 옵션입니다. ) 

 아래 이미지와 같이 git 상태를 보게 되면(git status), 해당 브랜치에 working tree가 clean 하다고 나옵니다. 이는 git이 Working Tree에 있는 파일을 모두 보고 있는데 변경되거나 새로 생긴 파일이 없음을 뜻합니다. Tracked > Unmodified 한 파일 상태인 거죠.

git commit -ma C.txt

 

 다음으로는 Tracked > Modified 파일 상태에 대해 알아보겠습니다. 

Modified 한 파일 상태를 보기 위해선, 현재 Working Tree에 최신 커밋 대비 변경된 내용이 있는 파일이 있어야겠죠?
따라서 파일 C.txt에 대한 내용을 변경해보겠습니다. (아래 그림 참조) vim편집기를 사용하여 C.txt를 수정하고 git status을 보겠습니다. modified : C.txt라는 문구가 떠있습니다. git은 최신 커밋에 들어가 있는 파일들에 대해 추적을 하고, 변경 상항이 생긴 파일을 확인하여 수정된 폴더라는 것을 알려주게 됩니다. C.txt는 Tracked > modified 한 상태인 거죠

 

2) UnTracked

 Untracked란 뜻은 말 그대로 추적을 안 하고 있다는 것인데요. Working Tree에 새롭게 생성된 파일은 이전까지 버전에 등록된 적이 없기 때문에 내용이 변경되더라도 git에선 그 사실을 알 수가 없습니다. 이와 같은 상황이 Untracked인 거죠.

 아래와 같이 touch 명령어로 D.txt 파일을 새롭게 생성해주면 D.txt는 현재 변경사항이 추적되지 않는 파일 상태가 됩니다. (Untracked file)

 

3) Staged

 마지막으로 Staged에 대해 알아보겠습니다. Tracked > modified와 Untracked 한 파일 상태들은 버전이 생성되어 관리되고 있지 않습니다. 불안정안 상태죠. 따라서 해당 파일들의 변경사항이나 새롭게 생성된 파일이 앞으로 관리가 필요하고, 적용이 되어야 한다면 해당 파일들에 대해서 버전을 생성해줄 필요가 있습니다. 이때 사용되는 파일의 상태가 Staged입니다. Staged file은 "변경되거나(Modified) 새로 추가된(Untracked) 파일들을 버전으로 만들고 관리할 거야!"라는 뜻을 갖습니다.  이전 시간에 같이 학습한 바와 같이 git에서는 버전으로 관리할 파일과 그렇지 않은 파일들을 구분 짓기 위해 관리할 파일들을 먼저 Stage영역에 올린다고 한 내용 기억하시나요? 그때 git add 명령어를 사용하여 버전으로 만들기 원하는 파일들을 선택하고 stage영역에 올리는데 올려진 파일들은 Staged 한 상태가 되는 것이죠. 그리고 git commit으로 최신 버전화 하게 됩니다.

 

 

 이와 같이 git file의 상태를 살피는 것만으로도 git에서 파일들을 어떤 식으로 운영하고 버전으로 만드는지 이해할 수 있습니다. 그리고 이는 git을 사용하는데 많은 도움이 될 거라 충분히 학습하시면 좋을 것 같습니다. 

 

추가적인 질문이나 궁금하신 점 있으면 언제든 댓글로 남겨주세요. 

 

 

 

*Reference

- "지옥에서 온 문서 관리자 깃&깃허브 입문" 이지스버블리싱 - 이고요, 고경희 지음

-

-

 

부족한 글이지만 읽어주셔서 감사합니다. 

배경

첫 번째 버전을 만들어 가면서 git이 버전을 어떻게 운용하고 관리하는지 알아보고자 한다. 

 

 

 

1. git init


처음 git을 사용하기 위해선 버전을 만들고 관리하기 위한 폴더를 하나 선정해야 한다. 그리고 해당 폴더에 git init 명령어를 사용하여 버전 관리를 하겠다고 설정해주어야 한다. 

본인은 바탕화면에 tmp_git_1이라는 폴더를 만들고 해당 폴더 안에 파일들을 버전으로 관리하고자 한다.

아래 명령어를 따라하면 git 초기 설정을 할 수 있다. 

$ mkdir tmp_git_1  // tmp_git_1 폴더 생성

$ cd tmp_git_1  // tmp_git_1 폴더로 이동

$ git init  // 해당 폴더 git repository 설정
Initialized empty Git repository in C:/Users/kkc28/tmp_git_1/.git/

$ ll -a  // 폴더 전체를 보면 .git폴더 생성
total 24
drwxr-xr-x 1 kkc28 197609 0 Sep 26 23:55 ./
drwxr-xr-x 1 kkc28 197609 0 Sep 26 23:55 ../
drwxr-xr-x 1 kkc28 197609 0 Sep 26 23:55 .git/

 

 

2. touch A.txt


git repository 설정이 완료되었으면, 버전 관리할 파일을 생성한다. 샘플로 touch 명령어를 사용하여 A.txt파일을 만들도록 하겠다. 독자들은 vi편집기든 여러 편집기를 사용해서 폴더를 작성해도 된다.

 

$ touch A.txt // A.txt 파일 생성

$ ll  // A.txt생성 확인
total 0
-rw-r--r-- 1 kkc28 197609 0 Sep 27 00:04 A.txt


 

 

 

3. git status


버전을 관리할 파일을 생성 완료하였으면, git status 명령어를 통해 상태를 확인한다. 파일들의 상태는 Untracked / Tracked -( modified / Unmodified ) / Staged 이렇게 나눌 수 있다. 각각의 상태는 다음과 같이 설명할 수 있다.


- Untracked : 해당 파일이 추적되지 않는 상태고, 버전 관리가 되지 않고 있는 상태
- Tracked > modified : 해당 파일이 추적되는 상태이고, 이전 버전과 현재 파일이 수정된 상태
- Tracked > unmodified : 해당 파일이 추적되는 상태이고, 이전 버전과 현재 파일의 내용이 같은 상태
- Staged : 해당 파일이 추적되어 있는 상태이고, 해당 파일을 최신 버전으로 업로드 하기 직전 상태

 

 

$ git status
No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
bash: $: command not found
        A.txt

nothing added to commit but untracked files present (use "git add" to track)


위에 상태를 보면 새로 만든 A.txt는 Untracked인 상태이다. 해당 폴더 및 파일은 별도로 버전을 생성한 적이 없기 때문이다. 

 

4. git add, git commit


우리는 A.txt를 신규 버전에 포함된 파일로 등록하려고 한다. 이를 위해선 해당 파일을 stage에 올리고, commit을 해야 한다. 여기서 stage란 가상의 장소로 변경점이 있거나 새롭게 버전에 포함시키려 하는 폴더들을 올리려는 무대라고 생각하면 된다.  

파일을 stage에 올리는 방법은 1) git add <filename> 명령어를 사용한다. stage에 버전으로 등록하려는 파일이 올라가면, 이후 2) git commit -m "<버전을 설명할 수 있는 정보>"로 버전을 생성한다. 

 

*commit은 완료한다는 뜻으로 "어떤 버전으로 이름을 등록하고 버전을 완료한다" 이정도로 이해하면 된다. 

 

$ git add A.txt  // stage에 A.txt올리기


$ git status  // git 상태 확인 -> untracked에서 staged되었다. 아래 changes to commited가 staged의 뜻
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   A.txt


$ git commit -m "first version upload A.txt"  // git commit을 통해 버전 등록
[master (root-commit) 39c17eb] first version upload A.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 A.txt

$ git log  // git 버전 등록 완료 
commit 39c17ebc124b5e5171878dbe1d1293f39fa65132 (HEAD -> master)
Author: 
Date:   Tue Sep 27 00:26:53 2022 +0900

    first version upload A.txt

이상으로 git을 이용해 첫번째 버전을 만들어 보았다. 

 

 

*Reference

- "지옥에서 온 문서 관리자 깃&깃허브 입문" 이지스버블리싱 - 이고요, 고경희 지음

 

부족한 글이지만 읽어주셔서 감사합니다. 

+ Recent posts