Git 개요
Git은 개발자들이 규모가 있는 프로젝트에서 협업을 위한 툴로, 버전 관리 툴입니다. 버전 관리란 개념적으로는 "유의미한 변화가 결과물로 나온 것, 유의미한 변화가 결과물로 저장된 것"을 의미합니다. 개발자 관점에서 보면 코드로 무언가 변화를 결과물로 저장한 것입니다. 그렇다면 버전관리는 왜 필요할까요?
프로그램은 한 순간에 뚝딱 만들어지지 않습니다. 결국 작은 기능들이 모이고, 오류들이 수정되고, 많은 기능 변화와 수정, 삭제, 개선 과정이 이루어집니다. 이때 파일들을 하나하나 따로 저장하거나 파일을 덮어쓰기 해버릴 경우, 관리하기 어렵고 기존의 코드가 삭제되는 등 많은 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 "Git"이 등장했습니다.
Git이 제공하는 주요 기능은 다음과 같습니다.
- 코드를 누가, 어떻게 변경했는지 내역을 저장한다. (버전 저장)
- 필요하면 특정 시점의 버전으로 돌아갈 수 있다. (버전 관리)
- 여러 명이 협업할 때, 코드가 겹치지 않도록 방지하고 여러 명이 작성한 코드들 합칠 수 있게 한다 (브랜치)
- 코드를 원격 저장소에 올려 많은 사람들과 협업이 가능하게 한다 (깃허브)
개발자라면 Git을 반드시 알아야 하며, Git을 사용할 줄 모르는 개발자라면 결코 협업을 제대로 할 수 없을 것입니다.
Git을 사용하는 2가지 방법
git을 사용하는 방법은 크게 2가지가 있습니다. "git bash"와 같은 터미널을 사용하거나, "소스트리"와 같은 프로그램을 이용하는 것입니다. 명령어를 주로 이용하는 터미널 방식은 "CLI(Command Line Interface)"라고 합니다. 그리고 그래픽 화면을 보며 마우스를 주로 이용하는 방식을 "GUI(Graphic User Interface)"라고 합니다. 각각의 장단점이 있기에 둘 다 자유자재로 사용할 줄 아는 것이 좋습니다. 이 Git 포스팅 시리즈는 "CLI"를 이용하여 진행합니다.
CLI (Command Line Interface)
CLI는 까만 터미널 창에서 명령어를 통하여 git을 사용합니다. 운영체제에 따라 사용하는 터미널은 조금씩 다르지만 git 명령어를 통해 git을 사용한다는 본질은 같습니다. GUI 툴에 비해 시각적으로 현재 상황을 바로 파악하기에는 쉽지 않지만 명령어들이 손에 익으면 쉽게 작업할 수 있고 많은 기능들을 사용할 수 있다는 장점이 있습니다.
(그리고 CLI는 터미널을 커스터마이징하는 맛이 있습니다^^)
GUI
대표적인 Git GUI 툴로는 "소스트리"가 있습니다. 소스트리 말고도 tortoise도 있습니다. 자신에게 맞는 툴을 사용하면 됩니다. 다만 CLI와 비교했을 때, GUI 툴은 기능적으로 부족한 부분들이 있습니다.
https://www.sourcetreeapp.com/
Git 초기 설정
가장 먼저 Git을 설치합니다. https://git-scm.com/ 여기에서 다운받을 수 있습니다.
다음의 Git 명령어를 통해, Git이 제대로 설치되었는지 확인합니다.
git --version
그리고 사용자 이름과 이메일을 입력하며 초기 세팅을 진행합니다.
git config --global user.name "(본인 이름)"
git config --global user.email "(본인 이메일)"
다음 명령어를 입력했을 때, 자신이 설정한 이름과 이메일이 잘 뜨면 성공입니다.
git config --global user.name
git config --global user.email
마지막으로 자신이 버전관리를 하고자 하는 폴더(디렉토리)로 이동하여 Git 저장소를 생성합니다. git init 명령어로 git 저장소를 생성하면 .git이라는 숨김 폴더가 생성됩니다.
git init
버전 관리를 위한 3가지 공간
버전이 만들어지는 과정을 제대로 이해하기 위해서는 Git의 3가지 공간에 대해서 알아야 합니다. Git이 관리하는 3가지 공간은 다음과 같습니다. "작업 디렉토리", "스테이지", "저장소"입니다. 지금은 이해가 안 되겠지만, 이 그림이 GIt의 작동 원리입니다.
작업 디렉토리 (Working Directory)
Git을 설치하고, git init 명령어를 통해 .git 숨김 폴더가 생성된 것이 "작업 디렉토리"입니다. 즉, 우리가 실제로 버전관리를 진행하고 프로젝트를 하는 작업 공간입니다. 작업 디렉토리에서 코드를 작성하고 폴더를 만들고, 또 코드를 수정하거나 삭제하는 등 프로젝트에 필요한 일들을 진행할 수 있습니다. 이것이 작업 디렉토리에 변경사항을 만드는 것입니다. 작업 디렉토리에 변경사항이 생겨도 그것을 모두 버전으로 만들 필요는 없습니다. 자신이 저장하기 원하는 변경사항만 버전으로 만들면 되는 것입니다.
스테이지 (Stage)
스테이지는 변경사항 중 새로운 버전이 될 파일들이 올라가는 공간입니다. 여러가지 변경 사항 중 기억하고 저장하고자 하는 특별한 변경사항을 스테이지로 올리는 것입니다. 작업 디렉토리는 명시적으로 보이는 공간이지만 스테이지는 명시적으로 보이는 공간은 아닙니다.
저장소 (Repository)
새로운 버전이 될 파일들이 스테이지로 올라가서 새로운 버전으로 만들면, 새 버전이 저장소에 추가됩니다. 저장소는 버전이 만들어지고 저장되는 공간입니다. 스테이지에 올라간 파일이 새로운 버전으로 만들어지면 더 이상 새로운 버전이 될 파일이 없기에 스테이지는 깨끗이 비워집니다.
3가지 공간의 연결성
작업 디렉토리, 스테이지, 저장소 이렇게 각자의 공간에서 버전 관리를 위한 작업들이 진행됩니다. 이 과정을 통해 저장소에 버전들이 쌓이게 됩니다. 작업 디렉토리에서 스테이지로 변경사항들을 올리는 것을 "스테이지에 추가(add)한다"라고 하며, 스테이지에 올라간 파일들을 저장소에 새로운 버전으로 만드는 것을 "커밋(commit)한다"라고 합니다.
변경 사항이 저장되고(작업 디렉토리), 스테이지에 추가되고(스테이지), 커밋하여 새로운 버전을 만드는 것(저장소)입니다.