Codesigner

[Git] Basic Git Workflow 본문

Git /git

[Git] Basic Git Workflow

eunsukimme 2019. 4. 8. 22:29

Git 은 당신이 프로젝트를 진행하면서 만드는 변화들을 추적할 수 있게 도와주는 소프트웨어다. Git은 당신의 프로젝트의 변화들을 기록하고, 이러한 변화들을 저장하며, 추후 필요하면 이를 다시 참조할 수 있게 만들어준다. 이번 시리즈에서는 Git을 다루는 기본적인 방법 및 워크플로우에 대해서 알아보도록 하겠다. 먼저, 바탕화면에서 git_test라는 폴더를 만들고 그 디렉터리로 이동한 다음 시작하도록 하자.

C:\Users\glafu\Desktop>mkdir git_test
C:\Users\glafu\Desktop>cd git_test

 

 

 

git init

 

Git을 프로젝트에 사용하려면 터미널에서 프로젝트 디렉터리상에서 git init 커맨드를 입력해야 한다. 이 커맨드는 Git이 당신의 프로젝트의 변화들을 추적할 수 있게 도와주는 필요한 툴들과 설정들을 셋업 시켜준다.

C:\Users\glafu\Desktop\git_test>git init
Initialized empty Git repository in C:/Users/glafu/Desktop/git_test/.git/

커맨드를 입력하면 위와 같이 .git 폴더를 생성하고 Initailized 됐다고 알려준다. 

 

 

 

Git Workflow

 

자, 방금 우리는 Git 프로젝트를 생성하였다. Git 프로젝트는 다음과 같은 세 가지 파트로 구분된다.

 

<그림 1> Basic Git Workflow(출처: codecademy.com)

 

  1.  Working Directory - 당신이 행하는 모든 작업들이 이뤄지는 디렉터리다. 파일을 만들고, 수정하고, 삭제하는 등의 작업들이 수행되는 공간이다. 

  2.  Staging Arera - Working Directory에서 만든 파일들의 변화들을 저장하는 곳으로, Repository에 저장될 준비가 된 변화들의 집합이다. 

  3.  Repository - Git이 Staging Area로부터 파일의 변화들을 영구적으로 저장하는 곳으로, 각 변화들은 각자 다른 버전을 나타낸다.

 

Git의 기본적인 workflow는 Working Directory에서 파일들은 편집한 후 Staging Area에 추가한 뒤, 마지막으로 변화들을 Repository에 저장하는 방식으로 흘러간다. Git에서는 Repository에 저장된 변화들을 Commit(커밋)이라고 하는데, 커밋에 대해선 나중에 더 자세히 알아보도록 하자.

 

 

 

git status

 

git status는 현재 Git 프로젝트의 상태를 확인할 수 있는 커맨드다. 터미널에서 다음과 같이 입력해보자

C:\Users\glafu\Desktop\git_test>git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

출력된 내용은 현재 커밋된 것도 없고, 커밋할 것도 없다는 내용이다. 우리는 지금부터 간단한 소설을 쓰는 프로젝트를 진행한다고 가정하고, 원하는 소설의 제목으로 텍스트 파일을 생성하고 그 내용을 채워보자. 필자의 경우는 hello.txt라는 텍스트 파일을 만들고, 그 내용을 "hello world!"로 작성하였다.

C:\Users\glafu\Desktop\git_test>vim hello.txt

C:\Users\glafu\Desktop\git_test>cat hello.txt
hello world!

자, 이제 다시 커맨드 창에서 git status 명령을 입력해보자

C:\Users\glafu\Desktop\git_test>git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        hello.txt

nothing added to commit but untracked files present (use "git add" to track)

아까 와는 다르게 Untracked files: 아래에 빨간 글씨로 hello.txt 가 적힌 걸 확인할 수 있다. Untracked는 Git이 프로젝트 내 파일을 감지하였지만 변화를 추적하지 못하고 있다는 것이다. 

 

 

 

git add

 

Git이 파일의 변화를 추적할 수 있게 하려면 해당 파일을 Staging Area에 추가해야 한다. git add 명령어는 파라미터로 파일 이름을 받으며, Working Directory 내 해당 이름의 파일을 Staging Area에 추가해준다.

C:\Users\glafu\Desktop\git_test>git add hello.txt

자, 이제 다시 한번 git status 명령으로 Git 프로젝트 상태를 확인해보자.

C:\Users\glafu\Desktop\git_test>git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   hello.txt


C:\Users\glafu\Desktop\git_test>

출력 결과를 보면 초록색 글씨로 new file: hello.txt라고 나온다. Git이 파일의 변화를 추적하고 있고, 커밋할 준비가 됐다는 것이다. 

 

 

 

git diff

 

자, 우리는 방금 파일을 Working Directory에서 Staging Area에 추가하는 방법을 알았다. Git이 파일의 변화를 추적할 수 있게 됐다고 말했는데, 과연 진짜로 그런지 확인해 보도록 하자. hello.txt에 다음과 같은 줄을 추가해보자.

C:\Users\glafu\Desktop\git_test>vim hello.txt

C:\Users\glafu\Desktop\git_test>cat hello.txt
hello world!
I'm second line!

C:\Users\glafu\Desktop\git_test>

현재 상황을 한 번 짚고 넘어가자면 Working Directory에서의 hello.txt 는 방 금 추가한 "I'm second line!" 문장을 포함하여 총 두 줄이고, Staging Area에서의 hello.txt는 한 줄이다. Working Directory와 Staging Area와의 차이를 확인하기 위해선 git diff 커맨드를 사용한다. git diff 커맨드는 파라미터로 파일의 이름을 받고, 해당 파일의 Working Directory와 Staging Area에서의 차이를 보여준다.

C:\Users\glafu\Desktop\git_test>git diff hello.txt
diff --git a/hello.txt b/hello.txt
index a042389..999fd2e 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1,2 @@
 hello world!
+I'm second line!

C:\Users\glafu\Desktop\git_test>

출력 결과를 보면 흰색 글씨로 hello world! 다음에 초록색 글씨로 +I'm second line! 를 확인할 수 있다. Working Directory에서의 파일의 변화를 "+" 기호와 초록색 글씨로 표현했음을 알 수 있고, Git이 파일의 변화를 제대로 추적하고 있음을 확인할 수 있다. 이제 이를 다시 git add 하여 Staging Area에 올리도록 하자.

C:\Users\glafu\Desktop\git_test>git add hello.txt

 

 

 

git commit

 

Commit(커밋)은 우리 Git Workflow에서의 마지막 단계다. Commit은 Staging Area의 변화를 Repository에 영구적으로 저장한다. git commit 커맨드가 바로 그 역할을 하는데, "-m" 옵션으로 커밋에 메시지를 남길 수 있다. 커밋 메시지의 기본적인 Convention들은 다음과 같다:

 

  • 반드시 quotation(따옴표) 마크로 감싸야한다

  • 현재형(명령형)으로 쓰여야 한다

  • 50자 이내로 간략하고 깔끔하게 작성한다

자, 이제 우리의 첫 번째 커밋을 만들어보도록 하자.

C:\Users\glafu\Desktop\git_test>git commit -m "Add first commit"
[master (root-commit) d9e17f2] Add first commit
 1 file changed, 2 insertions(+)
 create mode 100644 hello.txt

C:\Users\glafu\Desktop\git_test>

 

 

 

git log

 

git log는 커밋 이력을 확인할 수 있게 해주는 명령이다. 터미널에서 이 명령을 치고 나온 출력을 확인해보자.

C:\Users\glafu\Desktop\git_test>git log
commit d9e17f2638100c8f50866c811efda95909973c5c (HEAD -> master)
Author: eunsukimme <eunsu.dev@gmail.com>
Date:   Mon Apr 8 22:12:06 2019 +0900

    Add first commit

C:\Users\glafu\Desktop\git_test>

출력 결과에서 다음을 확인할 수 있다:

  • 40자의 SHA 해쉬값 - 각 커밋을 식별하는 식별자 역할을 한다

  • commit의 author - 커밋을 생성한 사람으로 여기서는 필자를 나타내고 있다

  • 커밋 날짜 및 시각

  • commit 메시지 

 

 

Git Workflow Review & Generalization

 

지금까지 Git의 기본적인 워크플로우를 알아보았다. 많은 것을 설명했는데, 이 과정들을 일반화시켜보도록 하자:

  • Git은 현업에서 가장 많이 사용되는 Version Control System(버전 관리 시스템)이다

  • Git은 파일의 변화를 추적하는 다음과 같은 명령어를 제공한다

    • git init - Git 프로젝트를 생성한다

    • git status - Git 프로젝트의 현재 상태를 보여준다

    • git add - Working Directory의 파일들을 Staging Area에 추가한다

    • git diff - Working Directory와 Staging Area의 차이를 보여준다

    • git commit - Staging Area에 저장된 변화들을 Repository에 영구적으로 저장한다

    • git log - 커밋 이력을 보여준다

 

오늘은 Git에서 가장 기본적이지만 가장 중요한 내용들을 다뤘다. 다음 포스팅에서는 Git 버전을 관리하는 방법, 즉, Backtracking에 대해서 알아보도록 하자.

Comments