안녕하세요.
Hynn 입니다.
이번 포스팅에서는 Linux 환경에서 Git 기본 설정 및 개념에 대해서 학습해보도록 하겠습니다.
이 포스팅에서 git 의 대한 기본 개념과, 설정을 마무리한다면, git 에 대한 이해도 어렵지 않게 마칠 수 있을 거라고 생각합니다.
======
1. git 의 동작 개념
2. Visual Studio Code 에서 사용 준비하기
3. git 기본 명령 사용하기
4. Branch, Commit 사용하기
======
1. git 의 동작 개념
git 의 동작개념을 이해한다면, 앞으로 다루게 될 명령어에서도 보다 이해를 할 수 있을 것이라고 생각됩니다.
흐름도를 간단하게 작성하면 아래의 그림처럼 표현이 가능합니다.
Git 의 동작개념은 위의 3개의 영역으로 구분할 수 있습니다.
먼저 Working Directory 에서는 2개의 타입으로 파일을 분류하여 관리할 수 있습니다.
Track 과 Untrack 인데요.
단어 그대로, 파일을 추적하고 있는지, 추적하고 있지 않은지에 대해서 입니다.
이를 대기 영역을 통해 보관하고, 최종적으로 저장소로 이동하는 작업이 Git 의 핵심입니다.
이러한 작업이 완료되면, Working Directory 와 Repository 의 데이터가 일치하는지에 대해서도 검사를 하게 됩니다. 이를 통해 변경점이 있는지를 추적할 수 있게 됩니다.
이러한 변경사항을 저장하는 한번의 과정을 "Commit" 이라고 합니다.
여기서 이 Commit 을 하는 과정은 아래의 그림처럼 설명이 가능합니다.
먼저 자신이 작업한 파일은 2개의 상태로 관리가 됩니다.
바로 위에서 언급한 Track/UnTrack 이 그것입니다. 이 상태는 각각 아래의 뜻을 나타내기도 합니다.
- Track : 한번이라도 관리 된 파일
- Untrack : 한번도 관리가 되지 않은 파일
여기서의 관리의 주체는 바로 "Git" 입니다.
자신이 작업한 파일을 수정하거나 변경한 사항이 있다면, 이제 아래의 명령어를 통해 대기영역으로 파일을 이동해야 합니다.
이를 위한 명령어는 아래와 같습니다.
A. 모든 파일을 추가하기
git add .
B. 특정 파일을 추가하기
git add [파일명]
이러한 작업을 진행하면, 파일이 대기영역으로 이동합니다.
여기서 이제 아래의 명령어를 사용하여 "Commit" 을 하면, 비로소 저장소에 저장이 되면서 하나의 버전이 Git 에서 생성되고, 이 버전과 작업 디렉토리의 영역에서 작성중인 사항을 비교하고, 그를 추적하게 되는 것이죠.
git commit
이를 실습하기 위해 Visual Studio Code 에서 예시를 가지고 작업을 해보도록 하겠습니다.
2. Visual Studio Code 에서 사용 준비하기
Visual Studio Code 에서 먼저 두가지 준비를 해야 합니다.
첫번째로는, Extension Application 중 "Git Graph" 의 설치와, Visual Stuido Code 에서 터미널을 실행해야 합니다.
각각의 이해를 위해, 아래의 사진을 참조하시면 좋을 거 같습니다.
위의 설정이 마무리 되었다면, 이제 아래와 같은 창을 마주할 수 있습니다.
항상 이러한 작업을 하기 전에는, Git 을 위해 Workspace 를 생성해야 합니다.
이를 위해서는, 새로운 폴더를 생성해봅시다.
저는 "git-workspace" 로 하나의 폴더를 새롭게 생성하여 작성을 해보도록 하겠습니다.
3. git 기본 명령 사용하기
폴더를 생성하여 경로를 선택하고 난 뒤, 터미널 창에 아래의 명령어를 입력합니다.
git init
위 명령어를 사용하면 작업영역에 "git " 저장소가 생성이되고 그를 위한 제반사항이 준비됩니다.
그를 확인하기 위해서는 터미널에서 아래의 명령어를 이용해서 눈으로도 확인이 가능합니다.
".git " 이라는 폴더가 실제 git 저장소 역활이 될 것입니다.
이 폴더는 앞으로도 별도의 편집을 하지 않는 것을 강력하게 권장드립니다.
이제 테스트를 위해 임의의 파일 3개를 생성해보도록 하겠습니다.
저는 Development, Test, Index 세개의 json 파일을 생성해보도록 하겠습니다. CLi 환경에 익숙해지시기 위해, 모든 작업을 Terminal 로 하시는 것을 권장드립니다.
vi Development.json
vi Test.json
vi index.json
기존의 작성보다 더 빠르게 3개의 파일을 생성했습니다.
위의 사진으로 알 수 있는 정보는 두가지 입니다.
먼저 왼쪽의, 파일 3개의 이름 옆에 보면 "U" 라는 표시가 있습니다.
이는 아직 git 에 파일이 관리되고 있지 않다는 의미 입니다.
그리고 원래의 터미널에서 나타나지 않았던 "Master" 라는 명칭이 있고, 초록색에서 노란색으로 변경된 것이 있습니다.
이는 아래의 의미를 뜻합니다.
- Green : Working Directory 와 Repository 의 데이터가 일치합니다.
- Yellow :Working Directory 와 Repository 의 데이터가 일치하지 않습니다.
당연하게도, 최초에는 모두 빈 상태였으니, 일치하겠지만, 파일을 추가함으로서, 일치하지 않는 다는 것을 알 수 있습니다.
이제 이를 Staging Area 에 추가해보도록 하죠. 위에서 명령어를 언급했지만, 다시금 작성해보겠습니다.
그리고 나서 상태도 확인해보도록 하겠습니다.
A. 파일을 한번에 추가하기
git add .
B. 파일을 각각 추가하기
git add Development.json
git add Test.json
git add index.json
git status
저와 다르게 .DS_Store 파일이 별도로 존재하는 사용자 분들도 계실 것이라고 생각합니다.
이에 대해서는 별도의 포스팅을 작성할 예정입니다. 해당 포스팅에서 DS_Store 의 대한 이해와 함께 표시되지 않게도 설정이 가능합니다.
만약 여기서 특정 파일들은 별도의 설정을 거치지 않고도, git 에서 추적하고 싶지 않은 파일도 존재할 것입니다. 개인만의 파일이 될 수도 있습니다.
이 경우에는 한가지 추가 작업을 해주어야 합니다.
vi .gitingnore
*.확장자명 --> 해당 확장자 파일을 모두 추적제외
파일명.확장자 --> 동일한 이름을 가진 파일을 모두 추적 제외
폴더명/ --> 대상 폴더와 하위파일을 추적 제외
여기서 테스트를 위해 아래의 명령어를 사용하여, 다시 모든 파일을 Working Directory 로 이동하고, .gitignore 에 Development.json 을 추가하면 아래와 같은 결과가 나타납니다.
git rm --cached Development.json
git rm --cached Test.json
git rm --cached index.json
git status
파일은 존재하지만, 위의 Developmenet 는 회색으로 표기되고, git status 에는 아예 목록조차 출력되지 않는 것을 확인할 수 있습니다.
여기서 이 .gitignore 는 반드시 Directory 의 최상단에 위치해야만 합니다. 이는 반드시 준수해야하는 규칙이니 꼭 기억하도록 합시다.
이제 다시 전체파일을 편의를 위해 추가하고, git status 를 살펴보도록 하면 아래와 같이 모든 파일이 Staging Area 영역으로 이동한 것을 확인할 수 있습니다.
git add .
git status
4. Branch, Commit 사용하기
이제 이를 Commit 을 하면 한번의 git 작업이 완료되는 것입니다.
이를 위해서는 아래의 명령어와 함께 메모를 작성해야 합니다.
이 메모에는 몇가지 약속된 규칙이 있어 이 역시 같이 살펴보도록 하겠습니다.
물론 팀 단위로 사용하느니 만큼, 특정한 규칙이 있다면, 이외에도 다양한 명령이 존재할 수 있습니다.
Commit 약어 | 설명 |
Feat | 새로운 기능을 추가합니다. |
Fix | 버그/문제를 수정합니다. |
Docs | 문서를 수정합니다. |
Style | 코드스타일을 수정합니다. |
Design | UI 를 변경/수정 합니다. |
test | 테스트를 위해 코드리팩토리를 수행합니다. |
Refactor | 코드리팩토리를 수행합니다. |
Rename | 파일명을 변경합니다. |
remove | 파일을 삭제합니다. |
여기서 우리는 최초로 저장하는 것이니 만큼, 최초 생성을 위해 "Initial Commit" 이라는 이름으로 수행을 해보도록 하겠습니다.
A. 간단한 한줄로 Commit 작성하기
git commit -m "Initial Commit"
B. 상세한 내용 작성을 위한 편집기 형태의 Commit 작성하기
git commit
한줄로 표현이 가능하다면 A의 표현으로도 충분하지만, 내용이 보다 상세해야 할 경우, B의 방법을 사용하면 Vi 명령어 처럼 편집기가 실행되고, Insert Mode 에서 작성 후 :wq! 등의 명령어를 사용하여 저장 후 나가기도 가능합니다.
Commit 이 완료됨과 동시에, Working Directory 와 Repository 의 내용이 일치함에 따라, Master 영역의 색상이 변한게 보이시나요?
이것이 한번의 git commit 을 완료한 단계입니다.
여기서 이제 위에서 설치한 Extension 기능을 살펴볼수도 있습니다.
git log
여기서 보아야 할 점은, Commit hash ID 입니다. 이 ID 는 고유한 값으로, 이후에 commit 에 관련된 정보를 조작할때 사용될 예정이오니, 꼭 알아두도록 해야 합니다.
Extension 에서는 보다 시각적으로 접근이 가능합니다.
Git Graph 를 실행하면 이렇게 보다 직관적인 접근이 가능합니다.
이제 여기서 Master 라는 이름에 대해서 살펴보아야 합니다.
이를 이해하기 위해서는, Commit 을 몇개 더 생성해보도록 하겠습니다.
먼저 예시를 위해 편의상 아래의 형태의 Commit 을 생성해보도록 하겠습니다.
"먼저 각 파일에 username 속성을 블로그로 변경하고, Test 파일의 오탈자를 수정한뒤, 각 파일의 비밀번호를 개인화설정할 것입니다.
그리고 설정을 관리하기 위해 Setting 파일을 하나 새성하고, 이 파일의 설정을 두번에 걸쳐 테스트를 한 뒤, test 파일을 삭제할 것입니다."
이 작업을 우리는 Commit 단위로 나누어 작업하는 것을 익혀야 합니다.
작성자 개인의 생각으로는 개발자의 처리단계는 절차지향적이여야 합니다.
즉 단계별로 하나씩 과정을 완료해가면서, To-do-list 를 정리해야, 효율적일 뿐 아니라, 이러한 Commit 에서도 직관적이고, 쉽게 처리가 가능하기 때문입니다.
이를 절차적으로 구분하자면 아래와 같습니다.
- 각 파일에 Username 속성 변경
- Test 파일 오탈자 수정
- 각 파일의 비밀번호 개인설정
- Setting 파일 생성
- Setting 파일 설정 변경 테스트
- Test 파일 삭제
Commit 을 기준으로 총 6번의 과정이 필요합니다.
이를 CLi 기반으로만 작성해보도록 하겠습니다.
예제 코드 전체를 올리지는 않겠습니다.
하지만 과정을 보면, 한단계씩 진행된 History 가 눈에 보이고, 이를 통해 작성자가 어떤 작업을 했는지를 한눈에 요약되어 파악할 수 있습니다.
이는 개인으로서도, 팀 단위로서도 매우 효율적이고 유용한 저장방법이기도 합니다. (중간에 하나 빼먹게 된건 애교로 넘어가주세요..)
이러한 Commit 단위에 대한 이해가 되었다면 이제 Branch 에 대한 이해가 필요합니다.
이것을 쉽게 이해하면 아래의 그림처럼 표현할 수 있습니다.
하나의 작업 프로젝트를 최상단의 PC라고 표현한다면, 각각의 작업자가 작업물을 생성하고, 수정, 편집, 삭제하는 과정을 거치게 됩니다.
즉, 여기서 작업자가 작업물을 생성하고, 수정, 편집, 삭제하는 일련의 단계들을 "Commit" 이라고 이해하시면 편리하고, 이를 수행하는 작업자를 "Branch:" 라고 이해하시면 보다 손쉽게 이해가 가능합니다.
즉 , 위의 예시에서는 "Master" 라는 Branch 가 총 7번의 작업, "Commit" 을 수정한 것이죠.
이러한 Branch 를 생성하고, 수정, 편집하는 명령은 아래의 명령을 사용할 수 있습니다.
A. Branch 현황 확인
git branch
B. Brnach 생성하기
git branch [생성할 Branch명]
C. Branch 전환하기
git switch [Branch명]
D. Branch 이름변경하기
git branch -m [현재Branch명] [변경희망Branch명]
E. Branch 삭제하기
git branch -d [삭제할 Branch명]
Git Graph 에서 Branch 별로의 작업 현황도 확인할 수 있습니다.
이러한 기본적 개념을 이해했다면, 이제 다음 포스팅에서는 이를 조작하는 세부적인 방법을 다루어 보도록 하겠습니다.
감사합니다.
'개발공부일지 > Git&Github' 카테고리의 다른 글
Git/GitHub 사용하기 - GitHub 를 사용하여 Git 관리 (0) | 2022.11.24 |
---|---|
Git 사용하기 - Branch/Commit 조작 및 편집하기 (0) | 2022.11.24 |
댓글