현재 기준으로 깃(Git)은 2.23.0 버전 (Mac OS)이 배포되고 있다. 이렇게 프로그램을 개발하면서 수정 내용이 쌓이게 되면 새로 번호를 붙여서 이전의 상태와 구별해서 관리한다. 이렇게 번호를 사용해 구별하는 것을 버전이라고 부른다.
목차
- 깃에서 버전이란?
- 스테이지와 커밋 이해
- 작업 트리에서 빔으로 문서 수정
- 수정한 파일 스테이징 - git add
- 스테이지에 올라온 파일 커밋 - git commit
- 스테이징과 커밋 한 번에 처리 - git commi -am
버전 만들기
1. 깃에서 버전이란?
우리는 보고서를 작성할 때 '초안'을 만들고, 만든 보고서를 수정하면서 수정 전의 내용을 보관하기 위해 '수정 1'과 같이 파일의 이름을 바꿔서 저장한다. 이렇게 이미 다양한 곳에서 버전 관리를 하고 있는데 깃에서 역시 문서를 수정하고, 저장할 때마다 생기는 것을 버전이라고 생각하면 된다.
하지만 이렇게 수정하는 버전이 100개, 1000개가 넘어가게 된다면 어떤 파일에서 어떤 내용을 수정했는지 기억하는 것은 불가능하다.
깃과 같은 버전 관리 시스템은 기초적으로 버전을 만드는 방법보다 훨씬 쉽게 버전을 만들고 만든 시간, 수정 내용까지 기록한다. 깃에서 버전을 관리하면 기존 파일의 이름은 그대로 유지하면서 내용의 변경 시점마다 저장할 수 있다. 또한 각 버전마다 작업했던 내용을 확인할 수 있고, 원하는 버전으로 되돌아갈 수도 있다.
2. 스테이지와 커밋 이해
깃의 파일 버전 관리 과정은 생소할 뿐만 아니라 눈에 보이지 않는 가상의 개념들이 등장하기 때문에 한 번에 이해하기 힘들다. 깃에서 버전을 만드는 단계는 아래와 같다.
2.1. 작업 트리
가장 처음 보이는 작업 트리(Working Tree)는 파일의 수정과 저장 등의 작업을 하는 디렉토리로 '작업 디렉토리(Working Directory)'라고도 불린다. 앞선 포스팅에서 깃 저장소로 만든 'git-master' 디렉토리가 이 작업 트리가 된다. 쉽게 말하면 우리 눈에 보이는 디렉토리가 바로 작업 트리다.
2.2. 스테이지
스테이징 영역(Staging Area)라고도 불리는 스테이지(Stage)는 버전으로 만들 파일이 대기하는 곳이다. 예를 들어 작업 트리에서 10개의 파일을 수정하고, 그중 4개의 파일만 버전으로 만들려면 해당 파일만 스테이지로 넘겨주면 된다.
2.3. 저장소
저장소(Repository, 리포지토리)는 스테이지에서 대기하고 있던 파일들을 버전으로 저장하는 곳이다. '리포지토리'와 '저장소'라는 용어가 모두 사용된다.
참고로, 스테이지의 내용은 .git/index 파일에 저장되고, 저장소의 내용은 .git/HEAD 파일에 저장된다.
그리고 스테이지와 저장소는 깃을 초기화했을 때 만들어지는 .git 디렉토리 안에 숨은 파일 형태로 존재하는 영역으로 눈에는 보이지 않는다. (shift + command + 마침표(.)로 볼 수 있다.)
지금까지 설명한 내용을 기억하면서 깃이 버전을 만드는 과정을 그림으로 표현하면 아래와 같다.
먼저, hello.txt라는 파일 문서를 수정하고, 저장하면 그 파일은 작업 트리에 있게 된다.
그리고 수정한 hello.txt 파일 중 버전으로 만들고 싶은 파일을 스테이지에 넣는다. 다른 내용이 수정된 파일도 추가적인 버전으로 만들기 원하면 이 또한 스테이지에 넣어 둔다.
파일의 수정을 끝내고 버전으로 만들 파일을 스테이지에 다 넣었다면 '커밋(commit)' 명령을 통해 버전으로 만들어 준다. 커밋 명령을 통해 새로운 버전이 생성되면서 스테이지에 대기 중인 파일이 모두 저장소로 저장된다.
이것이 깃이 버전을 만드는 순서라고 할 수 있다.
3. 작업 트리에서 빔으로 문서 수정
먼저, 터미널 창을 열어 앞서 만들어본 git-master 디렉토리까지 이동하고, 깃 상태를 확인하기 위해 아래와 같이 입력해 본다.
$ git status
그럼 아래의 그림과 같이 깃의 상태를 나타내는 메시지가 나타난다. 그리고 각 메시지의 의미는 아래와 같다.
1. On branch master: 현재 master 브랜치가 있다. (저장소에 있는 디렉토리와 비슷 / mater 브랜치는 다음에 설명)
2. No commits yet: 아직 커밋한 파일이 없다.
3. nothing to commit: 현재 커밋할 파일이 없다.
이제 git-master 디렉토리에 아래와 같이 새로운 파일을 만들어 본다. 그리고 입력모드로 변경한 후 숫자 '1'을 입력하고 문서를 저장해보자. 그리고 터미널 창에서 ls -la 명령을 입력하면 방금 만든 hello.txt 파일이 디렉토리 안에 만들어져 있는 것을 확인할 수 있다.
$ vim hello.txt
그리고 앞서 깃의 상태를 확인한 명령 'git status'을 다시 입력하고 다시 한번 깃의 상태를 확인해보면 아래와 같이 조금 다른 메시지를 확인할 수 있다. branch master에 hello.txt라는 untracked files가 있다는 메시지를 볼 수 있는데 깃에서 한 번도 버전 관리를 하지 않은 파일을 untracked files라고 부른다.
지금까지 작업 트리에서 문서 파일을 만들어 봤고, 이것은 깃이 파일을 만드는 과정을 그림으로 나타낸 부분 중 아래에 해당한다.
4. 수정한 파일 스테이징 - git add
이제 작업 트리에서 만든 파일을 수정하고, 해당 파일을 스테이지에 추가해 본다. 이렇게 깃에게 버전을 만들 준비를 하라고 알려주는 것을 '스테이징(staging)' 또는 '스테이지에 올린다.'라고 표현한다. (스테이징 내용을 .git/index 파일에 저장하기 때문에 스테이지에 올리는 것을 '인덱스(Index)에 등록한다.'라고도 한다.
깃에서 스테이징 할 때 git add라는 명령을 사용한다. 터미널 창에서 아래와 같이 입력하면 아무 내용도 나타나지 않지만 아무 일도 안 한 것은 아니다.
$ git add hello.txt
다시 git status 명령을 입력해서 아래의 그림과 같이 깃의 상태를 확인한다.
기존에 untracked files:라는 문구가 Changes to be committed: 로 변경됐다. 그리고 hello.txt 파일의 앞에 'new file'이라는 수식어가 추가된 것을 확인할 수 있다. 이것은 앞으로 '새 파일 hello.txt를 커밋할 것이다.'라는 뜻이다.
이렇게 수정한 파일 hello.txt가 스테이지에 추가됐다. 이 과정 역시 그림으로 나타내면 아래와 같다.
5. 스테이지에 올라온 파일 커밋 - git commit
앞서 스테이징 한 파일로 이제 버전을 만들 수 있다. 깃에서 버전을 만드는 것을 '커밋(commit)'이라고 말하는데 이 커밋을 할 때는 그 버전에 어떤 변경 사항이 있었는지 확인하기 위해 메시지를 함께 기록해야 한다.
깃에서 파일을 커밋하는 명령은 git commit이다. 아래와 같이 -m 옵션을 통해 커밋과 함께 저장할 메시지를 기록할 수 있다. 이 메시지를 커밋 메시지라고 한다. 이 커밋 메시지는 한글로 작성할 수 있지만, 외국인 개발자와 협업할 수 있기 때문에 주로 영어로 작성한다.
$ git commit -m "message1"
위 명령을 통해 커밋을 하면 아래 그림과 같은 결과 메시지를 확인할 수 있는데 파일 1개가 변경됐고, 파일에 1개의 내용이 추가됐다는 내용이다. 즉 스테이지에 있던 hello.txt 파일이 저장소에 추가된 것이다.
다시 한번 git status 명령을 통해 현재 깃의 상태를 확인하면 'nothing to commit (버전으로 만들 파일이 없다.)'과 'working tree clean (작업 트리도 수정사항 없이 깨끗하다.)'고 나타난다.
그리고 git log 명령을 통해 버전이 제대로 만들어졌는지 저장소에 저장된 버전을 확인할 수 있다. 아래의 그림과 같이 커밋을 만든 사람, 만든 시간과 커밋 메시지가 함께 나타나며 커밋한 버전에 대한 설명을 확인할 수 있다. 이렇게 수정과 관련된 다양한 정보를 함께 저장할 수 있고, 필요할 때 확인이 가능하다.
log를 확인 후 나가고자 할 때는 :q 명령을 입력하면 된다. (Mac OS 기준 / windows는 바로 나가 지는지 확인 필요)
이렇게 스테이지에 있던 hello.txt 파일의 버전이 저장소에 만들어졌고 이를 그림으로 나타내면 아래와 같다.
6. 스테이징과 커밋 한 번에 처리 - git commi -am
만약 한 번이라도 커밋을 한 적이 있는 파일을 다시 커밋할 때는 commit 명령에 -am 옵션을 추가해서 사용하면 스테이지에 올리고 커밋하는 과정을 한 번에 처리할 수 있다.
먼저, git-master 디렉토리에서 아래의 명령을 통해 빔에서 해당 파일을 열고, 숫자 1 아래에 숫자 2를 추가하고 문서 파일을 저장한다.
$ vim hello.txt
그리고 한번 커밋한 파일이라면 수정한 파일을 스테이지에 올리고 커밋할 때 사용한 명령을 아래와 같이 한번에 사용해서 스테이징과 커밋을 한번에 처리할 수 있다.
$ git commit -am "message2"
$ git commit -a -m "message2"
위 두 가지 명령 중 어떤 방법으로 입력해도 결과는 동일하다.
그리고 다시 한 번 git log 명령을 통해 커밋한 버전에 어떤 정보가 들어있는지 확인하면 아래와 같이 수정한 hello.txt 파일을 저장한 두 번째 버전의 정보가 message2라는 메시지와 함께 나타난다.
참고: 책 '지옥에서 온 문서 관리자 깃&깃허브 입문'의 내용
'Programing > Git and GitHub' 카테고리의 다른 글
[Git으로 버전 관리] 3. 커밋 내용 확인하기 (0) | 2020.04.07 |
---|---|
[Git으로 버전 관리] 1. 깃 저장소 만들기 (0) | 2020.04.02 |
[Git 시작] 3. 리눅스(Linux) 명령 연습하기 (0) | 2020.04.01 |
[Git 시작] 2. Mac OS에 깃 설치 및 환경 설정 (0) | 2020.03.31 |
[Git 시작] 1. 깃(Git) 이란? (0) | 2020.03.30 |