깃(Git) - 깃 버전 만들기 - 02
깃에서 버전이란?
- 버전은 문서를 수정하고 저장할 때마다 생기는 것
- 예를 들어 보고서를 작성할 때 ‘초안’이라는 이름으로 저장함
이미 만든 보고서를 수정하면서 수정 전 내용을 보관해야 할 경우가 있어 ‘수정’처럼 파일 이름을 바꿔서 저장
만약 1,000개가 넘는 문서의 수정 내용을 이런 방식으로 저장한다면 어찌어찌 몇 개의 파일 이름은 기억한다고 해도,
나중에는 어떤 파일에서 어떤 내용을 수정했는지 기억할 수 없음 - 이렇게 파일을 다른 이름으로 저장해 버전을 만드는 방법보다 훨씬 쉽게 버전을 만들고,
또한 버전을 만든 시간과 수정 내용까지 기록할 수 있는 것이 바로 깃과 같은 버전 관리 시스템 - 깃에서 버전을 관리하면 원래 파일 이름은 그대로 유지하면서 파일에서 무엇을 변경했는지를 변경 시점마다 저장할 수 있음 또, 버전마다 작업한 내용을 확인할 수 있고, 그 버전으로 되돌릴 수도 있음
작업 트리
- 작업 트리(working tree)는 파일 수정, 저장 등의 작업을 하는 디렉터리
- 작업 디렉터리(working directory)라고도 함
- 앞에서 만들었던 hello-git 디렉터리가 작업 트리 즉, 우리 눈에 보이는 디렉터리가 바로 작업 트리
스테이지
- 스테이지(stage)는 버전으로 만들 파일이 대기하는 곳
- 스테이징 영역(staging area)이라고도 함
- 예를 들어 작업 트리에서 파일 10개를 수정했는데 4개만 버전으로 만들려면
이 파일 4개만 스테이지로 넘겨주면 됨
저장소
- 저장소, 즉 리포지토리(repository)는 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳
스테이지와 저장소는 눈에 보이지 않음 깃을 초기화했을 때 만들어지는 .git 디렉터리 안에 숨은 파일 형태로 존재하는 영역 ![]() |
스테이지와 커밋 이해하기
![]() ![]() |
- 예를 들어 hello.txt 파일 문서를 수정하고 저장하면 그 파일은 작업 트리에 있게 됨
수정한 hello.txt 파일을 스테이지에 넣고 다른 파일도 수정한 뒤 스테이지에 넣어 둠
파일 수정을 끝내고 스테이지에 다 넣었다면 버전을 만들기 위해 깃에게 ‘커밋(commit)’ 명령을 내림
그러면 새로운 버전이 생성되면서 스테이지에 대기하던 파일이 모두 저장소에 저장됨
깃이 버전을 만드는 과정
1. 작업 트리에서 문서를 수정
2. 수정한 파일 가운데 버전으로 만들고 싶은 것을 스테이징 영역, 즉 스테이지에 저장 (등록)
3. 스테이지에 있던 파일을 저장소로 커밋하면 버전이 만들어짐
작업 트리에서 문서 수정하기
1. 앞에서 hello-git 디렉터리에서 깃을 초기화했으므로 이제부터 hello-git 디렉터리에서 버전 관리를 할 수 있음. 앞의 내용을 따라왔다면 현재 hello-git 디렉터리로 이동해 있을 것이므로 먼저 깃 상태를 확인하기 위해 다음과 같이 입력
$ git status
2. 깃의 상태를 보여 주는 메시지가 나타나는데 어떤 의미인지 간단히 살펴봄
On branch main: 현재 main 브랜치에 있음
No commits yet: 아직 커밋한 파일이 없음
nothing to commit: 현재 커밋할 파일이 없음
3. hello-git 디렉터리에서 터미널 창에 다음과 같이 입력해 hello.txt라는 파일을 만듦
$ vim hello.txt
4. 빔 편집기가 열리면 {{ I }} 또는 {{ A }}를 눌러 입력 모드로 바꿈
간단하게 숫자 ‘1’을 입력하고 {{ Esc }}를 눌러 ex 모드로 바꾼 후 :wq를 입력하고 {{ Enter }}를 누름
문서가 저장되면서 편집기가 종료
5. 터미널 창으로 돌아와서 ls -la 명령을 입력
hello.txt 파일이 디렉터리 안에 만들어진 것을 보고 다음과 같이 입력해서 깃의 상태를 다시 한번 확인
branch main에 hello.txt라는 untracked files가 있다는 메시지가 나타남
깃에서는 버전을 아직 한 번도 관리하지 않은 파일을 untracked files라고 함
$ git status
수정한 파일을 스테이지에 올리기 — git add
1. 깃에서 스테이징할 때 사용하는 명령은 git add
터미널에 다음과 같이 입력해도 아무 내용도 나타나지 않을 것이지만 아무 일도 안 한 것은 아님
$ git add hello.txt
2. 무엇이 바뀌었는지 깃의 상태를 확인
$ git status
3. untracked files:이라는 문구가 changes to be committed:로 바뀌었음
그리고 hello.txt 파일 앞에 new file:이라는 수식어가 추가로 나타남
‘새 파일 hello.txt를 (앞으로)커밋할 것이다.’라는 뜻
스테이징한 파일 커밋하기 — git commit
- 깃에서 파일을 커밋하는 명령은 git commit
한 칸 띄운 후에 -m 옵션을 붙이고 커밋과 함께 저장할 메시지를 적음
이 메시지를 커밋 메시지라고 함 - $ git commit -m "message1"
- 커밋한 후에 결과 메시지를 보면 파일 1개가 변경되었고(1 file changed), 파일에 1개의 내용이 추가되었다(1 insertion(+))고 나타남
스테이지에 있던 hello.txt 파일이 저장소에 추가된 것 - 커밋한 후 깃의 상태 확인
- $ git status
- 버전으로 만들 파일이 없고(nothing to commit), 작업 트리도 수정 사항 없이 깨끗하다(working tree clean)고 나타남
- 저장소에 저장된 버전을 확인할 때는 log 명령을 사용
- $ git log
- 방금 커밋한 버전을 설명하는 정보가 나타남
커밋을 만든 사람과 시간, 커밋 메시지가 함께 보임
수정한 파일을 커밋하면 이렇게 수정과 관련된 여러 정보를 함께 저장할 수 있고 필요할 때 확인할 수도 있음
스테이징과 커밋 한꺼번에 처리하기 — git commit -am
- 터미널에서 다음과 같이 입력해서 빔 편집기에 hello.txt 파일을 엶
- $ vim hello.txt
- 빔이 열리면 {{ I }}나 {{ A }}를 눌러 입력 모드로 바꿈
그리고 숫자 ‘2’를 추가한 후 {{ Esc }} 누르고 :wq를 입력해 문서를 저장하면서 편집기를 종료 - hello.txt 파일은 이전에 커밋한 적이 있으므로 git commit 명령에 -am 옵션을 붙여서 스테이징과 커밋을 한꺼번에
처리할 수 있음 - $ git commit -am "message2"
- 스테이징과 커밋 과정이 한꺼번에 보임
- 방금 커밋한 버전에 어떤 정보가 들어 있는지 확인
- $ git log
- hello.txt의 버전 2개가 나타나는데, 가장 최근 버전 정보가 ‘message2’라는 메시지와 함께 맨 위에 보임