지난번 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의 원리(=버전을 만드는 구조)를 알고 사용하는 것이 추가적인 기능들을 사용하고 이해하는데 큰 도움이 됩니다. 따라서 이번 시간에는 git의 원리 중에서도 git의 구조에 대해 설명하는 시간을 갖도록 하겠습니다.

※ git의 원리에는 두가지가 있습니다.  1) git의 구조, 2) git의 파일 상태 

 

 

1. GIT의 구조


 git이 버전을 만드는 데에는 크게 3개의 구조가 필요합니다.

첫번째는 Working Tree, 두 번째는 Stage, 세 번째는 Repository입니다.

 먼저 각각의 구조에 대해 설명드리고 어떤 식으로 파일들이 운영되는지 알려드리겠습니다. 

① Working Tree : 작업공간을 뜻하는 공간으로, git init명령어를 통해 생성된 공간을 말합니다. 파일의 수정과 저장하는 곳입니다. 우리가 흔히 생각하는 폴더라고 보시면 됩니다. 작업물은 파일이고요. 

 

② Stage : 무대를 뜻하는 공간으로, Working Tree처럼 보이는 공간이 아닌, 가상의 공간입니다. Working Tree에 있는 파일을 Stage에 등록함으로써 등록한 파일을 버전으로 만들기 전 대기하는 공간입니다. Stage가 필요한 궁극적인 이유는 여러개의 파일들이 Working Tree에서 수정되었어도 Stage를 통해서 원하는 파일의 변경사항을 버전으로 등록 가능해지기 때문입니다. 

 

③ Repository : 저장소를 뜻하는 공간으로, Stage에 대기하고 있던 파일들을 버전으로 저장해주게 됩니다. Repository에 등록이 되면 버전(commit)이 완성되게 됩니다. 

 

2. GIT의 구조 (운영방식)


 

 그럼 다음 예시를 통해 변경된 파일들을 어떻게 각각의 공간으로 등록하고 운영하는지 보여드리도록 하겠습니다. 

CASE) Working Tree에 있는 3개의 파일(A, B, C)을 모두 변경하고, 그중 A, B파일만 버전으로 등록하는 상황

 

위의 상황이면 다음과 같이 진행됩니다. 

1) A,B,C파일에 내용 변경 후, 상태 확인 git status

2) git add로 A, B파일을 Stage에 등록

3) Stage에 있는 A,B파일을 git commit으로 version 등록 

 

 

1) A,B,C파일에 내용 변경 후, 상태 확인 git status

   vim 편집기를 사용해 A, B, C파일의 내용을 변경한 뒤, git status 명령어를 사용하게 되면 다음과 같이 A,B,CA, B, C 파일들이 수정되어있다고, git에서 인식하게 됩니다. (이는 사전에 A, B, C파일을 별도 버전(커밋)으로 등록하였기 때문에 수정됨을 알 수 있습니다.) 여기서 수정한 A,B,C 파일은 모두 Working Tree에 있는 상태입니다. 

 

2) git add로 A, B파일을 Stage에 등록

  git add 명령어를 통해 A.txt와 B.txt만 Stage에 올렸습니다. C.txt파일은 이전 버전과 비교하여 수정은 되었지만 이번 버전에는 필요가 없어 등록하지 않을 예정입니다. 따라서 아래 초록 글씨로 A, B 파일은 stage에 올라갔다고 표기되고, C.txt 파일은 1)에서와 같이 빨간 글씨로 스테이지에 올라가지 않았다고 표기가 됩니다. 

 

3) Stage에 있는 A,B파일을 git commit으로 version 등록 

   git commit을 사용하여 Stage에 있는 A.txt와 B.txt를 Repository에 등록해주면 버전은 생성이 되고 git show를 통해 방금 생성된 버전에 대한 정보(어떤 부분이 변경되었는지?)를 알 수 있게 됩니다. 이후 git status를 통해 git의 상황을 보게 되면, A, B는 이미 수정된 사항이 버전으로 등록되었기 때문에 Working Tree와 Stage에서 없어지고 Repository에 저장됩니다.(여기서 없어진다는 표현은 파일의 삭제가 아니라 내용이 버전 안에 포함되어 생성된 버전과 비교하여 변경사항이 없음을 말합니다.) 버전으로 커밋하지 않은 C.txt만 Working Tree에 남아있게 됩니다. 

 

 

이로써 git의 구조와 구조 안에서 버전이 어떤식으로 생성되는 원리에 대해 설명하였습니다.

혹시 추가적으로 궁금하신 사항이 있으면 언제든지 댓글 부탁드립니다. :)

 

 

 

 

*Reference

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

-

-

 

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

 이번에는 지난 시간 동안 git add, git commit 명령어를 사용하여 만들었던 버전들의 내용을 확인하는 방법에 대해 알아보겠습니다. 

 

 

git log


① git log 내용

 그동안 만든 버전들의 내용을 보기 위해선 git log라는 명령어를 사용합니다.

git log

git log 명령어를 사용하면 다음과 같은 정보가 출력됩니다. 

① commit 해시 : 숫자와 영어의 조합으로 구성된 커밋 해시 값이 나오게 됩니다.
                             커밋 해시는 버전을 명명하는 아이디라고 생각하시면 됩니다. 

② Head 정보 : 현재 우리의 버전이 어디에 있는지 (= HEAD가 가리키고 있는 최신 버전) 브랜치를
                          알려줍니다.

③ commit 메세지 : 커밋을 생성하면서 적었던 메시지가 나옵니다. 

 

이외에도 작성한 작성자 정보( ← 해당 내용은 협업시 도움됩니다), 작성 시점이 나오게 됩니다. 

이와 같은 버전에 대한 정보를 나열해놓은 것을 commit log라고 합니다.  

 

 

② git log 옵션(--graph, --oneline)

 git log의 옵션은 매우 많습니다. 하지만 버전을 관리하고 협업하는 User입장에서는 2개의 옵션 정도만 알고 있으면 git을 사용하는데 무리가 없으리라 생각합니다. 

 

첫 번째는 --graph 옵션입니다. 

git log --graph

 git log --help의 매뉴얼을 참조해보면, --graph 옵션은 커밋 사이에 선을 그어주어 커밋 간에 관계에 대해서 알려주게 됩니다. 어떤 버전으로부터 이전 버전이 나오게 되었는지, 이후 버전이 나오게 되었는지 표기해주고 알 수 있게 해 줍니다. 아래 그림처럼요. 이후에 배울 branch라는 개념이 도입되면 버전이 점점 복잡해지기 때문에 가시화해서 버전 정보를 파악하는 것은 매우 중요해지게 됩니다. 

 


 두번째는 --oneline 옵션입니다.

git log --oneline

--oneline옵션은 말 그대로 commit log의 정보를 한 줄로 표기해주게 됩니다.  3개의 내용을 표기해줍니다. 커밋 해시 7자리와 HEAD정보, 커밋 메시지 정보를 알려주죠

 

일반적으로는 위의 두 개 옵션을 함께 사용해서 가시성을 높여 사용합니다. ㅎㅎ 

git log --graph --oneline

 

 

 

 

*Reference

- file:///C:/Program%20Files/Git/mingw64/share/doc/git-doc/git-log.html (git log --help)

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

-

 

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

 

 지난 시간에 git을 활용하여 첫 번째 버전을 만들어 보았습니다. 이번 시간에는 n번째 버전을 만드는 방법에 대해 설명하는 시간을 갖도록 하겠습니다. 

 

 이에 앞서 지난번 내용을 복기 해보면 git을 통해 첫 번째 버전을 만드는 방법은 다음과 같습니다.

1) 버전을 관리할 폴더에 가서 git init

2) 원하는 파일을 만들고 (예. A.txt) 해당 파일을 git add <파일 이름>을 통해 stage영역에 등록

3) git commit -m "<버전 이름>"을 사용하여 버전을 등록한다. 

 

 이제 n번째 버전 만드는 방법에 대해 알아볼게요. 

 

 

1. 기존에 있던 파일 내용 변경하고 버전 등록


 현재 git은 첫번째 버전이 완성된 상태입니다. 현 상태에서 관리하고 있는 파일 A.txt의 내용을 변경하고 버전을 등록해보도록 하겠습니다. 

 

① 기존 파일 내용 변경하기

  A.txt 파일 내용은 첫번째 버전에서 아무것도 적힌 내용이 없기 때문에 vi편집기를 이용해, "2 version"이라는 내용을 추가하였습니다. 

 

② 기존 파일 변경내용 버전 등록하기

  A.txt 파일의 내용을 변경한 지금 git에서는 어떤 상황일까요? 

 위를 보다시피 이전 버전에 포함된 파일의 경우 git에서는 지속적으로 traking을 진행합니다. 따라서 A.txt 파일이 첫 번째 버전 대비해서 수정(modifed)되었다고 표기해 주는 것이죠. 이와 같이 A.txt의 변경된 내용에 대해서 버전을 만들려면 git add를 통해 해당 파일을 stage영역에 보내주고 git commit 명령어를 사용해 주면 됩니다. 쉽죠? :) 

  

 

 

2. 신규 파일을 추가하고 버전 등록


 이번에는 신규 파일을 생성하고 버전을 등록해보도록 하겠습니다. 구동하는 프로그램에 추가적인 파일이 필요하여 생성했다는 가정을 하고 따라 하시면 이해하기 좋으실 거예요. 

 

① 신규 파일 생성

 먼저 신규 파일을 생성해 보도록 하겠습니다. 간단하게 touch B.txt 명령어를 사용하여 만들겠습니다. ll 명령어를 사용해서 B.txt 파일이 생성된 것을 확인할 수 있습니다. 

 

② 신규 파일 버전 등록하기

 버전을 생성할 때는 항상 이전 버전과 다른 점이 있어야겠죠? 이번 case는 새로운 파일이 생성되었다는 것이고요. 이를 확인하기 위해 git status 명령어를 사용해보겠습니다. 

 새로 추가된 파일 B.txt는 untracked 파일입니다. 이전 버전에 포함되지 않았기 때문에 별도로 tracking이 진행되지 않았고 변경된 내용이 있는지 모르는 상태죠. 

 이제 B.txt를 기존 버전 생성하는 방법과 동일하게 git add, git commit을 활용하여 버전을 만들어 보겠습니다. 

 git log를 보면 B.txt add라고 comment 달아놓은 커밋(version)이 보이시죠? 이로써 기존 버전의 파일이 변경되었을 경우와 신규 파일이 추가되었을 경우 버전 만드는 방법에 대해 알아보았습니다. 

 

 혹시 모르시거나 궁금하신 부분이 있으시면 언제든 댓글 남겨주세요. 

 

 

 

 

*Reference

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

-

-

 

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

 

+ Recent posts