Search

Git 의 기본 내용

Tag
local
remote
branch
.gitignore
개발 공부를 시작할때 우연히 노션과 깃허브 관리에 관한 글을 본적이 있다. 글쓴이는 나와 같은 국비 수강생이였는데, 공부 시작부터 노션과 깃허브로 포트폴리오를 차근차근 준비하였다는 내용이였다. 그래서 그게 뭔데?
깃허브(Github)는 분산 버전 관리 툴인 깃(Git)를 사용하는 프로젝트를 지원하는 웹호스팅 서비스이다.
Git은 형상 관리 도구 중 하나로, 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다.
정의를 보면 알 수 있듯이 깃과 깃허브를 통해 수많은 패키지와 파일들 디렉토리, 소스코드들을 따로 주고받을 필요 없이 여러 사람이 동시에 병렬적으로 개발 작업을 할수 있다.

local 과 remote

Git 은 원격 저장소 로컬 저장소 두 종류의 저장소를 제공한다.
원격 저장소(remote repository) : github 의 repository 를 의미한다.
로컬 저장소(local repository) : 내 PC에 파일이 저장되는 개인 전용 저장소이다.
팀프로젝트를 한다고 가정했을때, 조장이 만들어놓은 Repo 에서 내 PC 로 repo 를 clone 받아온다. 받아온 프로젝트를 내 PC 의 로컬 저장소에서 작업하다가 작업한 내용을 push 하고 싶을 때 원격 저장소에 업로드한다.

로컬 저장소

Working Directory (= Working Tree) : 사용자의 일반적인 작업이 일어나는 곳
Staging Area (= Index) : 커밋을 위한 파일 및 폴더가 추가되는 곳
Repository : staging area 에 있던 파일 및 폴더의 변경사항(커밋)을 저장
Git은 Working Directory → Staging Area → Repository 의 과정으로 버전 관리를 수행한다.

파일의 Life Cyle

Untracked : Git 이 관리하지 않는 파일
(한번도 Staging Area 에 올라간 적 없는 파일)
Tracked : Git이 관리하는 파일
Unmodified : 최신 상태
Modified : 수정되었지만 아직 Staging Area 에는 반영하지 않은 상태
Staged : Staging Area 에 올라간 상태

Branch

브랜치 란 여러 갈래로 작업 공간을 나누어 독립적으로 작업할 수 있도록 도와주는 Git의 도구이다. 왜 써야할까?
브랜치는 독립 공간을 형성하기 때문에 원본(master)에 대해 안전하다.
브랜치 내에서 되돌리거나 삭제를 한다. 이는 master 에 영향을 끼치지 못한다. 때문에 에러를 해결하여 master 에 반영하는 것이 가능하다. 즉, 고객이 사용하는 와중에 버전을 되돌리거나 삭제하는 일이 가능하게된다.
하나의 작업은 하나의 브랜치로 나누어 진행되므로 체계적인 개발이 가능하다.
Git은 브랜치를 만드는 속도가 굉장히 빠르고, 용량이 적게 든다.

branch 의 이동

이렇게 강력한 기능인 브랜치를 사용할 때 지켜야할 점이 있다. 브랜치를 바꾸기전에 해당 브랜치의 변경 사항을 커밋하였는지 확인해야 하는 것이다.
브랜치를 이동한다는건 HEAD 가 해당 브랜치를 가리킨다는 것을 의미한다. 브랜치는 최신 커밋을 가리키므로, HEAD 가 해당 브랜치의 최신 커밋을 가리키게 된다. 따라서 워킹 디렉토리의 내용도 HEAD가 가리키는 브랜치의 최신 커밋 상태로 변화한다.

branch 전략

왜 branch 전략을 세워야 하는가?
각각의 기능이 순차적으로 개발되거나 하나의 기능이 완료된 사항에서, 다른 기능의 개발 및 유지보수 운용이 복잡하며 어렵다.
차기 버전을 개발하는 도중에 운영중인 이슈 또는 장애로 인하여 현재 버전의 긴급 패치가 발생되면 개발 충돌이 빈번하게 발생한다.

.gitignore

특정 파일 혹은 폴더에 대해 Git이 버전 관리를 하지 못하도록 지정하는 것이다.
.gitignore 에 담기는 내용의 예로는 아래와 같다.
민감한 개인 정보가 담긴 파일
OS(운영체제)에서 활용되는 파일
IDE 관련 파일
개발 언어(python) 혹은 프레임워크(django)에서 사용되는 파일
가상 환경 : venv/
__pycache__/
주의할 점
반드시 이름을 .gitignore 로 작성한다.
.gitignore 파일은 .git 폴더와 동일한 위치에 생성한다.
제외 하고 싶은 파일은 반드시 git add 전에 .gitignore 에 작성해야한다.
add 하는 순간 버전관리의 대상이 되기 때문이다.

.gitignore 규칙

아무것도 없는 라인이나, #로 시작하는 라인은 무시한다.
슬래시(/) 로 시작하면 하위 디렉터리에 재귀적으로 적용되지 않는다.
디렉터리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
느낌표(!) 로 시작하는 패턴의 파일은 ignore(무시)하지 않는다.
표준 Glob 패턴
*(asterisk) 는 문자가 하나도 없거나 하나 이상을 의미
[abc] 는 중괄호 안에 있는 문자 중 하나를 의미
물음표(?) 는 문자 하나를 의미
[0-9] 중괄호 안에 하이픈(-)이 있는 경우 0에서 9사이의 문자 중 하나를 의미
**(2개의 asterisk) 는 디렉터리 내부의 디렉터리까지 지정할 수 있다. (a/**/z 라고 작성하면 a/z, a/b/z, a/b/c/z 까지 모두 영향을 끼친다.)

gitignore.io