엄청 오랜만에 글을 포스팅한다. 저번 학기에 전공 공부랑 이것 저것 바쁘다는 핑계로 블로그 기록을 멈췄었는데 생각해보니 다 핑곗거리일뿐, 결국 내가 부지런하지 못했고 치열하지 못했던 것 뿐이다.
그래서 앞으로는 열심히 공부하고 기록으로 남겨보겠다는 다짐(?)을 한다..
Git이란?
git이란 2005년 리누스 토발즈(Linus Torvalds)가 처음 소개했으며 소프트웨어의 소스코드를 효율적으로 관리해주는 툴이다. 깃이 제공하는 핵심 기능은 세 가지로 크게 분류할 수 있다.
1. 버전 관리(Version Control)
2. 백업(Backup)
3. 협업(Collaboration)
Git Bash를 추천하는 이유
git 을 사용하는 방법에는 여러 가지가 있겠지만, 익숙해지면 가장 편리하기도 하고, 고급자로 갈수록 더욱 선호하게 되는 것이 바로 Git Bash 이다. 리눅스 명령어를 사용하기에 리눅스 계열의 명령어를 사용했던 개발자라면 더더욱 추천할 수 밖에 없다.
깃 저장소 만들기
깃 초기화하기 ( git init )
git init이라는 명령어를 사용하게 되면 "Initialized empty Git repository in 경로"라는 git이 성공적으로 초기화되었다는 문구가 뜨고 해당 디렉토리에 .git이라는 디렉토리가 생성이 된다. 이 디렉터리가 깃을 사용하면서 버전(version)이 저장될 '저장소(repository)'이다.
버전 만들기
깃에서 버전이란
여기서 말하는 버전(version)은 우리가 흔히 아는 그 버전이 맞다. 깃에서 버전이란 문서를 수정하고 저장할 때마다 생기는 것이라고 생각하면 된다. 깃에서 버전을 관리하면 원래 파일 이름은 그대로 유지하면서 파일에서 무엇이 변경되었는지 변경 시점마다 저장할 수 있고, 작업 내용을 확인 가능하며, 원한다면 그 버전으로 되돌아갈 수도 있다.
스테이지와 커밋 이해하기
작업 트리(working tree) : 파일 수정, 저장 등의 작업을 하는 디렉터리로, '작업 디렉터리'라고도 부른다. 위에서 만들었던 hello-git 이라는 디렉터리가 작업 트리가 된다. 즉 우리 눈에 보이는 사용자의 디렉터리가 바로 작업 트리이다.
스테이지(stage) : 스테이지는 버전으로 만들 파일이 대기하는 곳이다. 말 그대로 스테이지, 즉 무대라고 보면 된다.
저장소(repository) : 저장소는 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳이다.
** 스테이지의 내용은 .git/index 파일에 저장되고, 저장소의 내용은 .git/HEAD 파일에 저장된다.
스테이지와 저장소는 눈에 보이지 않는다. 이는 .git 디렉터리 안에 숨은 파일 형태로 존재한다. 아래는 깃이 버전을 만드는 과정을 도식화 한 것이다.
hello.txt 파일 문서를 수정하고 저장했다고 하자. 그렇다면 이 hello.txt 라는 파일은 작업 트리에 있게 된다. 그리고 이 수정한 hello.txt파일을 버전으로 만들고 싶을 때 스테이지에 넣는다. 다른 파일 또한 마찬가지이다.
파일 수정을 끝내고 스테이지에 해당 파일들을 올렸다면 버전을 만들기 위해 깃에 '커밋(commit)' 명령을 내려야 한다. 커밋 명령을 내리면 새로운 버전이 생성되면서 스테이지에 올려져있던 파일이 모두 저장소에 저장된다.
정리하면, 먼저 작업 트리에서 문서(파일)를 수정한 후, 수정한 파일 중 버전으로 만들고 싶은 것들을 스테이징 영역, 즉 스테이지에 올린다. 그 후 스테이지에 올려져있던 파일을 저장소로 커밋하는 것이 깃이 버전을 만드는 순서이다.
수정한 파일을 스테이징하기 - git add
위의 git bash 창에서 보면, vim 편집기를 통해 hello.txt 를 수정하였다. 그 후 git status 라는 명령어를 입력하자 master branch에 hello.txt라는 untracked files가 있다고 알려준다. 깃에서는 아직 한번도 버전 관리르 하지 않은 파일을 untracked file 이라고 부른다. 지금까지의 작업을 도식화하면 아래와 같다.
위와 같이 작업 트리에서 파일을 만들거나 수정했다면 스테이지에 수정한 파일을 올려야한다.
깃에서 스테이징할 때 사용하는 명령어는 git add이다.
git add hello.txt라는 명령어를 입력하면 아래와 같은 깃 상태를 확인할 수 있다.
위에서의 untracked files 라는 문구가 changes to be committed로 바뀌었다. 뿐만 아니라 helo.txt 파일 앞에 'new file:' 이라는 수식어가 추가로 생겼다. '새 파일 hello.txt를 커밋할 것이다'라는 뜻이다. 여기까지를 도식화하면 위에서 봤던 그림과 같은 그림을 볼 수 있다.
스테이지에 올라온 파일 커밋하기
파일이 스테이지에 올라왔다면 이제 버전을 만들 수 있다. 깃에서는 이를 '커밋'한다라고 한다.
깃에서 파일 및 디렉터리를 커밋하는 명령은 git commit이다. -m 옵션을 붙이고 뒤에 메시지를 적으면 '커밋 메시지'를 남길 수 있다.
ex) git commit -m "I committed this file"
git status 를 쳐보면 nothing to commit이라고 나오며, 스테이지에 올라와있던 파일이 정상적으로 commit 된 것을 확인할 수 있다.
위와 같이 스테이지에 있던 hello.txt 파일의 버전이 저장소에 만들어졌다. 이를 도식화하면 아래와 같다.
스테이징과 커밋 한번에 처리하기 ( git commit -am )
commit 명령에 -am 옵션을 사용하면 스테이징과 커밋 과정을 한번에 처리할 수 있다. 다만 이는 한 번이라도 커밋한 적이 있었던 파일을 다시 커밋하는 경우(전에 한번 해당 파일을 커밋한 적이 있고, 이를 수정하는 경우)에만 사용할 수 있다.
커밋 내용 확인하기
버전을 관리하려면 지금까지 어떤 버전이 있었는지, 그리고 버전마다 어떤 차이가 있는지 파악할 수 있어야한다.
커밋 기록 자세히 살펴보기 ( git log )
git log 명령을 입력하면 지금까지 만든 버전이 화면에 나타나고, 각 버전마다의 설명도 함께 보인다.
commit이라는 항목 옆에 영문과 숫자로 된 긴 문자열이 나타나는 것은 커밋 해쉬(commit hash) 혹은 깃 해쉬(git hash)라고 부른다. 커밋을 구별하기 위한 식별자라고 생각하면 된다. 커밋 해쉬 옆에 있는 (HEAD->master)는 이 버전이 가장 최신이라는 것을 나타낸다. 그리고 Author 항목에는 누가 버전을 만들었는지, Date에는 버전이 언제 만들어졌는지를 나타낸다. 그 아래에는 작성자가 기록한 커밋 메시지가 나오고, 이처럼 git log 명령을 입력했을 때 나오는 정보를 통틀어 간단히 '커밋 로그'라고 부른다.
변경 사항 확인하기 ( git diff )
git diff 명령을 사용하면 많은 내용이 파일에서 수정되었다 하더라도 구체적으로 어디가 어떻게 수정되었는지 비교하여 보여주기 때문에 매우 유용한 기능이다. 이 git diff 명령을 사용하면 작업 트리에 있는 파일과 스테이지에 있는 파일을 비교하거나, 스테이지에 있는 파일과 저장소에 있는 최신 커밋을 비교해서 수정한 파일을 커밋하기 전에 최종적으로 검토할 수 있다.
hello.txt 파일의 내용을 조금 수정하고 git status 명령어를 사용해보았다.
hello.txt 파일이 modified 되었다고는 하지만, 아직 스테이징 상태는 아니다.
이 수정한 hello.txt 파일이 저장소에 있는 최신 버전의 hello.txt와 어떻게 다른지 확인해보자.
빨간 부분은 최신 버전과 비교할 때 삭제된 내용이고, 초록 부분은 최신 버전과 비교할 때 추가된 내용이라는 뜻이다.
이와 같이 작업 트리에서 수정한 파일과 최신 버전을 비교한 다음, 수정한 내용으로 다시 버전을 만들려면 스테이징을 하고 커밋을 한다. 수정한 내용을 버리려면 git checkout 명령을 사용해 수정 내용을 취소하는데 이는 다음에 자세하게 다뤄보자.
/ /문제제기 및 피드백 언제든지 감사히 받겠습니다.
'Computer Science > Git || Github' 카테고리의 다른 글
Git 작업 되돌리기 (0) | 2021.09.01 |
---|---|
Git 파일 상태 (0) | 2021.08.31 |