1장 — 게임 세이브 포인트: Git이 하는 일
3월 3일 화요일 1교시 뒤 쉬는 시간, 2학년 B반 최은영 학생이 교무실 문을 열고 들어왔습니다. "선생님, 어제 우리 반 웹사이트 왜 빈 화면이었어요? 저 다른 반 친구들한테 자랑하려고 열었는데 아무것도 안 나왔어요." 김진관 선생님은 그 말을 듣고 자리에 앉자마자 브라우저에 'Git 뜻'을 처음으로 검색했습니다. 어제 아침 교실 앞에서 본 빈 화면이 다시 머릿속에 떠올랐습니다.
Git은 내 코드의 세이브 포인트를 언제든 원하는 만큼 만들어 주는 도구입니다.
Git이 왜 필요한지 한 문장으로 말하면 이렇습니다. AI가 파일 열두 개를 동시에 망가뜨려도, 어제 저녁 "세이브"해 둔 지점으로 프로젝트 전체를 되돌릴 수 있기 때문입니다. 이 챕터를 마치면 저장소를 만들고, 첫 커밋을 찍고, 히스토리에서 이전 시점으로 돌아갈 수 있습니다.
(1) 저장소 — 수업 자료 폴더가 기억을 갖기 시작하는 순간
저장소(repository)는 수업 자료 폴더가 "기억"을 가지기 시작한 상태입니다. 평소 바탕화면의 2학년B반_수업자료 폴더에는 지금 이 순간의 파일만 들어 있습니다. 어제 파일이 어땠는지, 지난주에 무엇을 바꿨는지는 폴더 자신은 모릅니다. 이 폴더를 Git 저장소로 지정하는 순간부터는 다릅니다. 폴더가 자기 안의 모든 변화를 스스로 기록하기 시작합니다. 여러 프로젝트를 동시에 진행해도 각자의 기억이 섞이지 않습니다. class-2b 저장소는 학급 웹사이트의 기억만, 수행평가 채점 도구 저장소는 채점 도구의 기억만 따로 보관합니다.
실습은 한 번이면 끝납니다. GitHub Desktop에서 File > New repository를 누르고 폴더 위치를 지정합니다. Git은 그 폴더 안에 .git이라는 숨김 폴더를 만들어 기록을 보관합니다. 이 숨김 폴더는 건드리지 않아도 됩니다. 읽고 쓰는 것은 Git이 알아서 합니다. GitHub Desktop 왼쪽 History 탭을 열면 맨 위에 첫 줄이 생겨 있습니다. 이것이 첫 번째 세이브 포인트입니다.
잘 안 되면?
New repository버튼을 눌렀는데 "This directory does not appear to be a Git repository" 같은 안내가 다시 뜰 때가 있습니다. 두 가지를 확인합니다. (1) 폴더 경로에 한글이 있어도 괜찮지만, 드라이브 문자(C:, D:) 바로 다음에 큰따옴표나 공백이 섞여 있으면 문제가 됩니다. 폴더를C:\class-2b처럼 단순한 경로로 옮기면 바로 해결됩니다. (2) 이미 다른 Git 저장소 안에 폴더를 만들려고 한 경우입니다. 상위 폴더를 Git 저장소에서 해제하거나, 완전히 다른 위치에 새 폴더를 만듭니다.
(2) 커밋 — 수업 일지에 날짜와 제목을 붙이는 순간
커밋(commit)은 수업 일지에 "3월 3일(화) 1교시 — 학급 소개 웹사이트 첫 공개"라고 제목을 달고 페이지를 넘기는 행동입니다. 수업 일지가 하루치 내용을 한 페이지로 마무리하듯, 커밋은 지금 프로젝트 전체의 모습을 한 장면으로 찍어 보관합니다. Ctrl+S와는 다릅니다. Ctrl+S는 파일 하나의 지금 내용을 덮어씁니다. 이전 상태는 사라집니다. 커밋은 프로젝트 전체를 통째로 사진처럼 찍어 두기 때문에, 커밋 10개를 쌓아두면 세이브 포인트 10개가 생깁니다. 어느 커밋으로든 돌아갈 수 있습니다.
커밋에는 반드시 메시지를 함께 적습니다. 수업 일지에 날짜만 있고 제목이 없으면 한 달 뒤 자신에게 아무 정보도 주지 않는 것과 같습니다. "학급 소개 첫 버전", "영단어 퀴즈 기능 추가"처럼 나중의 내가 알아볼 한 줄을 남깁니다. "수정함", "update" 같은 이름은 일주일 뒤 쓸모가 없습니다.
잘 안 되면? 커밋 버튼을 눌렀는데 "Please tell me who you are" 같은 영문 안내가 뜨면 Git이 나를 처음 만난 상태입니다. 이름과 이메일을 한 번만 등록하면 끝납니다. GitHub Desktop을 쓴다면
File > Options > Git탭에서 이름과 이메일을 채웁니다. 이름은 영문 또는 한글, 이메일은 GitHub 가입에 쓸 주소를 적으면 됩니다. 같은 컴퓨터에서는 두 번 묻지 않습니다.
(3) 히스토리 — 수업 일지 목록에서 원하는 날짜 찾기
히스토리(history)는 지금까지 찍어 둔 커밋을 수업 일지 목록처럼 시간 순으로 보여줍니다. GitHub Desktop에서 왼쪽 History 탭을 누르면 커밋이 최신부터 아래로 펼쳐집니다. 각 줄에는 내가 적었던 메시지와 날짜가 그대로 남아 있습니다. 한 줄을 클릭하면 오른쪽에 그때 어떤 파일이 어떻게 바뀌었는지 색으로 표시됩니다. 초록색은 추가된 줄, 빨간색은 지워진 줄입니다. "학급 소개 첫 버전" 줄을 오른쪽 클릭하고 Revert this commit을 고르면 그 시점으로 프로젝트 전체가 돌아갑니다. 프롤로그에서 김진관 선생님이 아쉬워한 바로 그 동작입니다.
잘 안 되면? 히스토리 탭을 열었는데 목록이 비어 있다면 커밋을 아직 한 번도 찍지 않은 상태입니다. 저장소를 만든 것만으로는 히스토리가 생기지 않습니다. 변경 사항을 하나 만들고 커밋 버튼을 한 번 눌러 봅니다. 그 순간 첫 줄이 생깁니다.
이 챕터의 핵심 3줄
(1) 저장소는 프로젝트 폴더가 자기 변화를 스스로 기억하도록 만든 상태입니다. (2) 커밋은 프로젝트 전체의 지금 모습을 한 장면으로 찍어 보관하는 세이브 포인트입니다. (3) 히스토리는 커밋을 시간 순으로 보여주며, 원하는 줄을 골라 그 시점으로 돌아갈 수 있습니다.
완료 체크리스트
- 저장소가 무엇인지 한 문장으로 설명한다
- 커밋이 Ctrl+S와 어떻게 다른지 말한다
- 히스토리 목록에서 이전 커밋으로 돌아갈 수 있다는 사실을 안다
다음 챕터 예고
2장에서는 커밋을 찍기 전에 어떤 파일을 담을지 고르는 과정을 다룹니다. 단체 사진을 찍기 전에 찍힐 사람만 모으는 장면을 떠올리면 감이 잡힙니다.