깃(Git)의 커밋은 파일의 한 상태를 기록한다. 글을 고칠 때마다 저장 버튼을 누르는 일과, 어떤 상태를 이력으로 남길지 고르는 일은 다르다. 아래 연습에서는 두 문장의 두 버전을 남긴다. 이제 ‘최종’이라는 파일 이름이 모든 책임을 혼자 질 필요는 없다.
준비와 실행
- Git이 설치된 컴퓨터에서 터미널을 연다. 아래는 macOS나 리눅스의 셸, 또는 Git Bash에서 실행하는 예다.
- 기존 작업 저장소 밖의 연습 공간으로 이동한다.
poem-history라는 폴더가 이미 있다면 다른 새 이름을 정하고 아래 두 줄을 함께 바꾼다. - 명령을 한 줄씩 실행하고 오류가 나면 그 자리에서 멈춘다. 특히 폴더 생성이나 이동이 실패했다면 다음 명령을 실행하지 않는다. 이름과 이메일은 이 저장소 안의 연습용 기록이며 전역 설정을 바꾸지 않는다.
git diff에서 추가된 둘째 문장을 확인한다. 두 번째 커밋 뒤git log에는 두 기록이 나타난다.- 마지막 명령은 첫 버전의 내용을 출력한다. 현재 파일을 그 버전으로 덮어쓰지는 않는다.
mkdir poem-history
cd poem-history
git init
git config user.name "연습 기록자"
git config user.email "[email protected]"
printf '창문을 열었다.
' > poem.txt
git add poem.txt
git commit -m "첫 문장"
printf '창문을 열었다.
바람은 문장이 아니었다.
' > poem.txt
git diff -- poem.txt
git add poem.txt
git commit -m "둘째 문장 추가"
git log --oneline
git show HEAD~1:poem.txt
남긴 것과 남기지 않은 것
git add는 다음 커밋에 넣을 내용을 고른다. 여기서는poem.txt만 지정해 주변 파일이 딸려가지 않게 한다.git commit이 끝나기 전에 고친 모든 순간이 자동 보관되는 것은 아니다. 버전 관리는 기록 시점을 선택하는 일이기도 하다. 기록이 있다는 사실만으로 모든 수정 이유를 알 수 있는 것도 아니다.- 연습용 이름과 이메일도 커밋 정보의 일부로 남는다. 나중에 저장소를 공유한다면 수정 이력에 남는 이름도 공개 범위에 포함해서 살핀다.
- 이 명령에는 원격 저장소로 보내는 단계가 없다. 컴퓨터 안의 이력과 다른 곳의 백업은 별도로 생각한다.
이력을 글의 재료로 삼고 싶다면 마지막 문장부터 지우는 시로 갈 수 있다. 파일 이름 끝에 붙이던 ‘진짜 최종’들의 행방은 최종본의 고고학에 남겨두자.
참고: Git 공식 입문 안내.