Git에 대해 알아보겠습니다.


Git이란 소스코드를 효율적으로 관리하기 위해 사용되는
버전 관리 시스템입니다.

말이 너무 어렵습니다.
쉬운 예를 하나 들어보겠습니다.


문서를 편집할 일이 생기면
사본을 만들어 사본을 편집하는 것이 현명합니다.
왜냐하면 원본으로 돌아가야 할 일이 생길수도 있기 때문입니다.

이때 보통 파일명들은 다음과 같을 것입니다.

스크린샷, 2019-10-05 15-59-21.png

위와 같이 파일을 수정하고 정리하다보면 어떤 부분이 변경된 것인지 파악하기 어렵습니다.

위 파일들을 소스코드라 생각해보겠습니다.
협업을 하면서 여러 명이 동시에 작업해 완료한 파일을 자신이 실수로 재수정한 경우도 발생할 수 있습니다.

이런 문제들을 해결하기 위해 만들어진 것이 Git입니다.


1. Git repository

Git repository란 말 그대로 파일이나 폴더를 저장해 두는 저장소입니다.

1-1. Remote / Local repository

Git repository는 두가지 종류가 있습니다.

  • Remote repository
    파일이 Remote repository 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소입니다. 여러 사람과 같이 쓰는 공유 클라우드 느낌으로 생각하면 쉽습니다.

  • Local repository
    내 PC에 파일이 저장되는 개인 전용 저장소입니다.

평소에는 자신의 PC의 Local repository에서 작업하다가 자신의 소스코드를 공개하고 싶을 때, Remote repository에 업로드 합니다. (Push)
그리고 Remote repository에서 다른 사람의 소스코드를 자신의 Local repository로 가져올 수 있습니다. (Pull)

스크린샷, 2019-10-05 16-13-24.png

1-2. Local repository 만들기

Local repository를 만드는 방법은 두가지가 있습니다.

  1. 아예 새로운 저장소를 만드는 방법 (git init)

  2. 이미 만들어져 있는 Remote repository를 Local repository로 복사해오는 방법 (git clone)

git init 사용법

프로젝트를 시작할 working directory에서 이 명령어를 사용하면 됩니다.

$ mkdir hello-world

$ cd hello-world

/hello-world $ git init

이 과정을 마치고 나면 hello-world 디렉토리에 .git이라는 디렉토리가 생기게 됩니다.

이로써 Local repository를 하나 만든 것입니다.

git clone 사용법

보통 github의 url을 통해 복사해오는 방법이 주로 쓰이므로 그 문법을 포스팅하겠습니다.

$ git clone url 폴더이름

2. Work tree와 Index

내 PC에서 작업을 하고 저장소에 올린다고 했는데, 이렇게 작업하는 폴더를 git에서는 Work tree라고 표현합니다.
그리고 저장소에 업로드하기 전에 Index라고 불리는 공간에 등록해줘야합니다. 이를 staging이라고 표현합니다. 그리고 staging한 파일을 저장소에 업로드하는 것을 commit이라고 표현합니다.

스크린샷, 2019-10-05 16-59-26.png

정리해보자면

Work tree --(1)--> Index --(2)--> repository

(1) : staging
(2) : commit

staging이 필요한 이유

예를 들어, 10개의 파일을 수정했지만 그 중에 7개만 저장소에 업로드하고 싶을 때, 이 7개만 선택하는 작업이 staging입니다.

2-1. staging 명령어

$ git add 파일이름

staging을 위한 명령어입니다.
이 명령어를 이용해 파일을 Index에 등록합니다.

git add 사용예제

1의 Git repository 파트에서 만든 hello-world 폴더 안에 sample.txt라는 파일을 만들었습니다.

그리고 hello-world 폴더의 상태를 확인하기 위해 다음 명령어를 실행해줍니다.

$ git status

이를 통해 hello-world 파일의 상태를 확인하면

$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#     sample.txt
nothing added to commit but untracked files present (use "git add" to track)

Untracked files(추적 대상이 되지 않은 파일)로 sample.txt가 있습니다. git add을 통해 Index에 파일을 등록(staging)하면 추적 대상으로 등록할 수 있습니다.

$ git add sample.txt

Tip!

파라미터에 . 을 지정하면 모든 파일을 Index에 등록할 수 있습니다.

$ git add .

3. Git commit

git은 버전 컨트롤 시스템이라고 했습니다. 그러므로, 파일이나 폴더의 추가/변경 사항을 저장소에 기록하는 것이 중요합니다.

이를 commit이라 합니다.

commit은 아래 그림처럼 시간순으로 저장됩니다.

스크린샷, 2019-10-05 16-52-28.png

commit을 통해 과거의 변경 이력과 내용을 알 수 있습니다.

3-1. commit 하기

commit 문법

$ git commit -m "Comment"

2의 Work tree와 Index 파트에서 sample.txt를 staging하였습니다.
이제 commit까지 진행하겠습니다.

$ git commit -m "first commit"

그리고 상태를 확인해보면

$ git status
# On branch master
nothing to commit (working directory clean)

모든 변경사항이 commit된 것을 알 수 있습니다.

4. 변경 이력 확인하기

commit까지 완료했습니다. 이제 저장소의 변경이력을 확인해봅시다.

문법

$ git log

결과

$ git log
commit ac56e474afbbe1eab9ebce5b3ab48ac4c73ad60e
Author: junkyuu<devzunky@gmail.com>
Date:   Sat Oct 5 17:45:21 2019 +0900

    first commit

누가 언제 어떻게 commit을 남겼는지 확인할 수 있습니다.


$ git status$ git log의 차이를 정확하게 짚고 넘어가겠습니다.

$ git status의 경우

파일들의 상태를 확인합니다.

먼저 파일의 Untracked / Tracked 상태를 확인합니다.
이는 git의 추적대상인지 보여주는 것입니다.

그리고 Tracked 상태라면
Unmodified, modified, staged상태를 확인할 수 있습니다.

명령어 그대로 status(상태)를 보여줍니다.

$ git log의 경우

해당 branch의 commit 내역을 보여줍니다.

명령어 그대로 log(기록)를 보여줍니다.