[Git] Git 기초 및 GitKraken 실습_1

유혜지·2024년 2월 21일
0

git/github

목록 보기
1/4

해당 게시물은 [모두의 깃&깃허브] 책을 기반으로 작성되었습니다.

git이 없다면?

은 버전을 관리하기 위한 도구입니다. 버전 관리란 무엇이며, 왜 해야 하는 걸까요? 깃 없이 웹사이트를 만든다고 가정해 봅시다.

1️⃣ 변경 내역을 확인하기 어렵다.

대개 파일을 단순히 저장하면 이전에 저장된 내용에서 현재 내용으로 덮어씁니다. 즉, 저장된 파일은 항상 최신 상태만 갖게 됩니다. 하지만 이런 방식으로는 현재 저장된 내용이 이전에 비해 무엇이 어떻게 달라졌는지 알기 어렵습니다. 다시 말해, 변경 내역을 추적하기가 어렵습니다.
매번 다른 이름으로 따로 파일을 저장하여 관리하는 방법도 있지만, 이는 프로그램 개발 과정에서만큼은 권장할 만한 방법이 아닙니다. 매번 파일을 다른 이름으로 새롭게 저장하여 변경 내역을 관리하는 것은 저장 공간을 낭비하는 일일 뿐 아니라 쉽게 실수할 수 있기 때문입니다.

2️⃣ 버전을 되돌리기 어렵다

파일을 단순히 덮어쓰거나 다른 이름으로 저장하는 방식으로는 과거 특정 시점으로 파일을 되돌리기도 쉽지 않습니다. 가령 우리가 개발한 웹 사이트에서 메뉴 바의 디자인을 변경했다고 합시다.

디자인을 변경하는 과정에서 소스 코드 파일 곳곳을 수정하거나 삭제했을 것입니다. 하지만 이때 수정한 코드에 문제가 생겼거나 사용자 반응이 영 좋지 않은 등 여러 문제로 이전의 모습으로 되돌려야 하는 상황이 생길 수 있습니다.

만일 파일을 단순히 덮어썼거나 다른 이름으로 저장하는 방식으로 변경 내역을 관리했다면 파일의 어느 부분이 삭제됐고, 어느 부분을 어떻게 되돌려야 할 지 파악하기 어려울 것입니다.

3️⃣ 협력하기 어렵다

대규모 소프트웨어는 대부분 여러 개발자가 협업하여 개발합니다. 예를 들면 아래와 같이 누군가는 배너를 만들고, 누군가는 메뉴를, 누군가는 게시판 목록을 만드는 식으로 각자 개발할 업무를 맡고, 추후 각자 만든 내용을 합치는 것입니다.

만일 모두가 작업한 파일을 덮어쓰는 방식으로 저장했거나 다른 이름으로 파일을 저장하는 방식으로 파일을 관리했다면 서로의 작업 내역을 합칠 때 매우 어려워집니다. 웹 사이트를 이루는 파일이 여러 개이고 코드 양이 방대하다면 누가 어떤 파일에서 어떻게 파일을 수정했는지 파악하기 힘들기 때문입니다.

버전과 버전 관리 이해하기

우리가 관리하려고 하는 버전이란 정확히 무엇이고, 이를 어떻게 관리해야 할까요?

  • 버전이란?
    유의미한 변화가 결과물로 나온 것, 유의미한 변화가 결과물로 저장된 것을 의미합니다.

우리가 코드로 무언가를 만드는 일은 유의미한 변화(버전)들을 쌓아 올리는 것과 같습니다. 버전이 모이고 모여 거대한 소프트웨어 결과물이 만들어지는 것입니다.

  • 버전 관리란?
    앞에서 언급한 문제를 발생시키지 않으면서 유의미한 변화를 쌓아 올리며 소프트웨어를 만들어 나가는 과정이라고 볼 수 있습니다. 다시 말해, 개발에서 버전 관리는 다음과 같이 정리할 수 있습니다.
  • 누가, 어떻게 변경했는지 변경 내역들을 기억하며
  • 필요하다면 특정 시점의 버전으로 되돌리며
  • 여러 명이 협업하는 과정에서 코드를 쉽게 나누고 합치며
  • 개발하는 것

버전 관리의 큰 그림

버전이 언제, 어떻게 만들어지는지 큰 그림을 그려보겠습니다.

버전이 만들어지는 과정을 이해하려면 깃이 관리하는 세 개의 공간, working directory, stage, repository를 먼저 이해해야 합니다.

먼저, 우리의 프로젝트가 위치할 공간working directory 또는 working tree라고 합니다. 그리고 여러분은 깃을 이용해 working directory 내에 위치한 파일 및 폴더의 현재 상태를 버전으로 맏늘고, 만들어진 버전을 관리할 수 있습니다. 즉, working directory버전 관리의 대상이 위치하는 공간입니다.

작업 디렉터리에 있는 프로젝트가 다음 그림처럼 여러 파일과 폴더로 이루어져 있다고 가정해 봅시다. 우리는 이 프로젝트에 새로운 파일 또는 폴더를 생성할 수도 있고, 기존의 파일 또는 폴더를 수정하거나 삭제할 수도 있습니다. 달리 말해, 작업 디렉터리에 변경 사항을 만들 수 있습니다.

참고로, .git 폴더가 놓여 있는 곳이 우리의 프로젝트가 위치할 공간, 즉 working directory입니다.

'버전을 만든다'는 말은 '특정 순간의 변경 사항을 기억한다'는 말과 같습니다. 그렇기에 작업 디렉터리에 있는 프로젝트에 변경 사항이 생기는 순간 새로운 버전을 만들 수 있게 됩니다. 이 변경 사항은 새로운 파일이 추가되는 것일 수도 있고, 특정 파일을 수정하거나 삭제하는 것일 수도 있습니다.

그런데, 이 때 꼭 모든 변경 사항을 전부 새로운 버전으로 만들어야 할 필요는 없습니다. 변경 사항 중에서 새로운 버전에 포함하고 싶지 않은 경우도 있기 때문입니다.

그렇기에 새로운 버전을 만들기 전에, 작업 디렉터리 내에서 변경 사항이 생긴 파일 중 '다음 버전이 될 후보를 선정하는 작업'이 필요합니다. 예를 들어 작업 디렉터리 내에 1,000개의 파일이 있고, 이 중 100개의 파일에 변경 사항이 발생했다면 이 100개의 파일 중 새로운 버전이 될 파일을 선정하는 작업이 필요합니다.

그래서 깃으로 버전을 만들 때는 작업 디렉터리 내에서 변경 사항이 생긴 파일들 중 새로운 버전이 될 파일들만 특별한 공간으로 옮기는 작업을 거치게 됩니다. 이 특별한 공간이 바로 stage입니다. 즉, 스테이지는 변경 사항이 있는 파일 중 다음 버전이 될 후보가 올라가는 공간입니다.

💡 다시 말해, 우리는 버전을 만들기 위해 작업 디렉터리에 있는 파일에 변경 사항을 만들고, 이 중 새로운 버전으로 만들 파일을 선별해 스테이지로 옮깁니다.

참고로 작업 디렉터리는 프로젝트가 위치한 공간이라 눈으로 직접 볼 수 있는 반면, 스테이지는 명시적으로 보이지 않습니다.

다음 버전이 될 후보들을 모두 스테이지로 옮겼다면 이제 이 파일을 새로운 버전으로 만들어야겠죠. 스테이지에 있는 파일들을 바탕으로 새로운 버전을 만들면, 새 버전이 repository(저장소)에 추가됩니다. 작업 디렉터리에서 만들어진 모든 버전들의 내역이 repository에 있습니다. 즉, 저장소는 버전이 만들어지고 관리되는 공간입니다.

참고로 저장소도 스테이지와 마찬가지로 사용자에게는 명시적으로 보이지 않습니다.

스테이지에 올라온 파일을 토대로 새로운 버전을 만들면, 새로운 버전이 될 후보가 더 존재하지 않으니 스테이지는 깔끔하게 비워집니다.

이러한 과정을 반복하며 저장소에는 새로운 버전들이 차곡차곡 쌓이게 됩니다.

이때 작업 디렉터리에서 버전이 될 후보 파일을 스테이지로 옮기는 것을 '스테이지에 추가한다(add)'라고 표현합니다.

또한, 저장소에 새로운 버전을 만드는 것을 '커밋한다(commit)라고 표현합니다. 이렇게 만들어진 새로운 버전을 스냅샷이라고 표현하기도 합니다.

정리하자면, 작업 디렉터리의 파일은

1. 변경 사항 생성
2. add
3. commit

과정을 통해

1. working directory
2. stage
3. repository

순으로 이동하며 새로운 버전이 만들어집니다.


이제까지 배운 용어들을 git GUI tool인 GitKraken을 통해 실습해보겠습니다. git 명령어도 함께 알아두면 좋을 것 같아 작성해놨습니다.


GitKrakengit GUI 툴입니다. 각 브랜치 구조를 직관적으로 파악할 수 있고, commit, push, pull, repository 생성과 관리 등을 편리하게 할 수 있습니다.


먼저 GitKraken에 접속한 뒤 local repository를 생성해보겠습니다. 상단의 메뉴바에서 File > Init Repo를 클릭해줍니다.

$ git init 

  • name: local repository의 이름 지정
  • Initialize in: local repository의 상위 폴더 지정

하단의 내용은 git이라고 하는 루트 폴더에 test라는 local repository를 생성하겠다는 의미입니다.

임의로 지정해준 뒤 Create Repository 버튼을 클릭해줍니다.

하단의 사진은 생성된 local repository의 초기 모습입니다.

생성된 로컬 저장소에 가보면 다음과 같이 .git 폴더가 존재합니다. 이전 게시물에서 이미 언급했듯이, 이 .git 폴더가 존재하는 곳을 working directory라고 부릅니다.

working directory에서 여러 개의 파일을 가지고 작업한 뒤, 이 중 새로운 버전으로 만들고 싶은 파일들을 stage(추상적 개념)에 add하고, 이를 commit하면 repository에 옮겨져 새로운 버전이 생성된다고 언급했다.

해당 폴더에 아무 파일이나 옮겨보자.

이후 GitKraken에 가보면, 깃크라켄이 로컬저장소의 변동을 감지한 후 다음과 같이 나타납니다. 이는 새로운 파일이 하나 생겼다는 의미입니다.

속이 빈 원을 클릭하면 우측의 Unstaged Files에 새로운 변경 사항이 있는 파일들이 나타납니다. test.txt 파일 위에 마우스를 올리면 다음과 같이 Stage File 버튼이 나타나는데, 이를 클릭해주자.

이렇게 Stage File 버튼을 누르는 것을 Add를 했다고 표현!

$ git add file1, file2
$ git add . # 현재 디렉토리에서 변경된 모든 파일

아래와 같이 Stage Files에 파일이 옮겨졌을 것입니다. 이후 Commit Message 하단에 간단한 메시지를 남겨 해당 커밋 내용이 무엇에 관한 것인지 작성해줍니다. 그리고 난 뒤 Commit changes to n file(s) 버튼을 눌러주면 커밋이 완료됩니다.

# stage에 추가된 수정 파일에 대해서만 커밋됨에 주의
$ git commit -m "commit message" 

로컬 저장소에 커밋이 완료된 것을 확인할 수 있습니다. commit의 summary와 description이 보이므로, 시간 순으로 직관적인 커밋 구조를 파악할 수 있습니다.

0개의 댓글

관련 채용 정보