Git은 버전 관리 시스템이에요 : 프로젝트의 상태를 여러 시점에 저장하고, 과거로 돌아갈 수 있게 해주고, 여러 사람이 같은 코드베이스에서 서로 덮어쓰지 않고 작업할 수 있게 해줘요. Google Docs나 Dropbox와 비교했을 때, Git은 두 가지 근본적으로 다른 일을 해요 : 언제 저장할지 직접 결정하고(그리고 각 저장에 이름을 붙이고), 각 저장은 프로젝트의 완전한 상태예요. 증분 diff가 아니에요.
핵심 개념 : diff가 아닌 스냅샷
많은 사람들이 Git을 연속적인 패치 모음으로 생각해요. 틀렸어요. Git은 스냅샷을 저장해요 : commit마다 해당 시점의 전체 파일 트리 사진을 보관해요. 변경되지 않은 파일은 이전 버전에 대한 참조만 있어요(디스크 절약), 하지만 개념적으로 각 commit은 완전하고 독립적인 상태예요.
실용적인 결과 : 히스토리를 사진 라이브러리처럼 탐색할 수 있어요. 각 commit에는 고유 식별자(SHA 해시, a3f5b6c 형태), 날짜, 작성자, 메시지, 그리고 부모(첫 번째 commit 제외)가 있어요. 전체가 그래프를 이뤄요.
세 구역, 세 가지 역할
작업할 때 프로젝트는 세 구역에 존재해요 :
- Working directory : 에디터에서 보고 편집하는 파일들.
- Staging area (또는 "index") : 다음 commit을 준비하는 임시 공간. 일부 변경사항만 여기 넣고 나머지는 나중으로 미룰 수 있어요.
- Repository : 한 번 기록되면 변하지 않는 commit 히스토리.
일반적인 흐름 : 파일 편집(working) → git add 파일.txt(staging) → git commit -m "..."(repository). 이 분리 덕분에 파일 열 개를 수정했더라도 한 번에 한 주제씩 commit할 수 있어요.
먼저 로컬, 그다음 원격
Git은 분산형이에요 : 프로젝트의 전체 히스토리가 프로젝트 루트의 숨김 폴더 .git/에 저장돼요. 인터넷 연결 없이도 commit, 브랜치 생성, 히스토리 조회를 다 할 수 있어요.
원격 서버(GitHub, GitLab 등)와의 동기화는 git push와 git pull로 명시적으로 해요. 언제 작업을 공개할지는 여러분이 선택하고, 그때서야 다른 사람들이 볼 수 있어요.
설치 확인하기
버전이 보여야 해요(예 : git version 2.43.0). 명령어가 없다면 git-scm.com에서 Git을 설치하세요.
Git에 자신을 소개하기
첫 번째 commit 전에 Git은 여러분이 누구인지 알고 싶어해요. 이 설정은 한 번, 전역으로 해요.
이 이메일이 commit에 표시돼요. GitHub에 공개한다면 commit이 올바르게 귀속되도록 GitHub 계정과 연결된 이메일을 사용하세요.
다음으로
다음 레슨에서는 첫 번째 레포를 만들고, 첫 번째 commit을 하고, 매일 사용할 명령어들을 알려드릴게요.
