main-logo

GIT 에 대하여

GIT 에 대해 알아보자

profile
김준호
2021년 12월 23일 · 0 분 소요

들어가며

우리는 다양한 프로젝트를 여러 사람들과 진행한다.
이때, 원활한 진행을 위해 다양한 형상 관리(혹은 버전관리-VCS) 툴을 사용하고 있는데 대표적으로 CSV, SVN, GIT이 있다.
그중 우리가 많이 사용하는 GIT에 대하여 알아보도록 하겠다.

형상 관리

과거 형상 관리 혹은 버전관리가 없던 시절에는 잘못 만들 코드를 되돌리거나 여러 작업자가 하나의 파일을 수정하는 상황에 있어 어려움이 있었다.
과거 코드를 되돌리기 위해 이전 코드를 백업 후 작업하며 관리를 하고 찾아야 했으며, 여러 명이 동시에 작업해야 하는 파일은 각 작업자들이 서로 작업 중인지를 묻고 작업을 해야 했다.
이렇게 하는데도 코드는 충돌이 나서 에러가 자주 발생했다.
이러한 문제들로 형상 관리의 필요성이 대두되었고 CSV, SVN, GIT 등이 도입되었다.

GIT에 대하여

GIT은 리눅스의 아버지인 리누스 토발즈가 만들 버전 관리 도구다.
리눅스 기반으로 개발되었기에 Bash 명령 기반으로 입력하고 실행한다.
물론 GUI 기반의 툴도 있다.

git은 저장소 가 있고 저장소에는 각 브랜치 라는 영역이 존재한다. 보통 git에서 저장소를 만들면 main 브랜치가 기본적으로 만들어진다.
이전에는 master 였으나 주종 관계 의미를 담고 있는 용어를 제거하는 추세다보니 main 으로 만들어진다.
대개 main 브랜치는 서버반영을 위한 기본 브랜치로 사용된다. (다른 브랜치를 서버반영용 브랜치로 써도 무방하다)
작업자는 기능별 혹은 화면별 브랜치를 만들어 해당 브랜치에서 작업을 하게된다.
작업이 완료되면 PR(Pull Request) 요청을 보내는데, 저장소 관리자는 요청받은 PR의 코드를 확인하고 main 브랜치와 병합을 하게 된다.

GIT의 구조와 기본명령

git의 구조는 내 컴퓨터 영역과 원격 영역이 있다.
내 컴퓨터 영역에는 staging 영역과 local Repository 영역이 있다. 사용자가 작업하고 git add test.html이라는 명령을 하게 되면 해당 파일은 staging 영역에 등록된다.
staging 영역은 git 이 변경이력을 추적하도록 등록되는 영역이라고 생각하면 된다.
staging 영역에 등록된 파일이 있다면 git commit -m “commit message” 명령을 통해 local Repository 영역으로 등록한다.
commit 이 된 파일들은 git push 명령을 통해 원격 영역인 리모트 리파지토리에 올릴 수 있다.
순서대로 다시 나열해보자면
1.git add 파일명 혹은 경로
2.git commit -m “commit message”
3.git push
의 순서로 이루어지며, 내 브랜치를 다른 브랜치에 병합해야 할 경우에는 해당 브랜치로 이동 후 git merge “내 브랜치명” 명령을 통해 병합할 수 있다.
보통 main 브랜치에 병합을 할 때 사용하며, 기존에 사용하던 내 브랜치를 계속 사용하고 싶으면 main 브랜치에 내 브랜치를 merge 및 push 후 내 브랜치로 이동하여 main 브랜치를 병합하면 동기화가 된다.

image02.PNG

git의 Bash 화면은 위와 같이 노출된다.
노란색 글자는 경로를 의미하고 뒤 하늘색의 글자는 브랜치를 의미한다.
내용을 살펴보면 붉은색 경로 및 파일을 컴퓨터에서 수정된 파일로 staging 영역에 등록되지 않은 파일들을 의미한다.
자세히 보면
changes not staged for commit에 있는 파일이 있고,
untracked files에 있는 파일이 있다.
changes not staged for commit의 파일은 한번 추적이 되었고 수정이 발생한 파일에 대해 나타난다.
untracked files는 말 그대로 추적되지 않은 신규 파일을 의미한다. 폴더까지 새로 만들어지면 파일명이 아닌 폴더명만 노출되며, 추적(git add)이 되면 파일을 확인할 수 있다.

image03.PNG

위 화면은 untracked 된 파일을 git add 명령으로 실행한 결과이다.
신규 파일이라는 new file과 해당 파일 경로/파일명이 노출되는 것을 확인할 수 있다.

image04.PNG

위 화면은 staging에 있는 파일을 local Repository로 이동시키는 git commit 명령을 실행시킨 화면이다.
git status 명령으로 나온 출력 내용을 살펴보면
” ‘origin/junho’ by 2 commits.”
이라는 내용을 확인할 수 있다.
이 내용은 2건의 commit이 있다는 의미로 push를 하면 원격 브랜치에 내용이 적용된다.

image05.PNG

push를 하면 노출되는 내용이다.
제일 마지막 메시지를 보면 “junho -> junho” 라고 있는데, local junho 브랜치에서 리모트 junho 브랜치로 push 되었다는 것을 의미한다.
이것은 junho 브랜치에서 다른 브랜치로 push 할 수 있다는 의미도 되지만 가급적 push를 할 경우에는 본인이 작업하는 브랜치로 올리고 병합은 해당 브랜치 담당자에게 병합을 요청하는 것이 좋다.

마치며

다들 git 을 사용할 수 있지만 어떤 의미로 어떻게 동작하는지에 대하여 알았으면 하는 바람으로 이번 글의 주제를 선정하였다.
나도 아직 제대로 아는 것은 아니지만, 이 글이 누군가에게 도움이 된다면 더할 나위 없이 행복할것 같다.
추가로 stash, rebase 와 같은 심화한 부분은 git scm 의 문서에 많이 나와 있으니 한번 둘러보는 것도 좋다.

참고문서

dololak 님의 블로그
snippet 님의 블로그
위키백과 git
git scm