[Git 스터디 1-1] 버전관리와 Git 기본 설정
이 글은 Git 스터디 1일차 첫 번째 자료를 블로그용으로 정리한 것이다. 전체 흐름은 Pro Git 한국어판을 기준으로 잡았다.
분산 버전관리 시스템
현재 우리가 사용하는 Git은 분산 버전관리 시스템(DVCS, Distributed Version Control System)이다. 분산 버전관리에서는 서버뿐 아니라 각 클라이언트에도 저장소의 버전 기록이 남는다.
이 구조의 장점은 단순 백업 이상의 의미가 있다. 서버에 문제가 생겨도 클라이언트의 복제본에서 복구할 수 있고, 여러 리모트 저장소를 두면서 팀, 그룹, 외부 협업자와 다양한 방식으로 작업할 수 있다. 중앙집중식 버전관리만으로는 만들기 어려운 워크플로가 가능해진다.
Git의 파일 관리
Git은 파일을 크게 세 가지 상태로 본다.
-
Modified: 파일을 수정했지만 아직 다음 커밋 대상으로 올리지 않은 상태 -
Staged: 다음 커밋에 들어갈 스냅샷으로 표시한 상태 -
Committed: 데이터가 로컬 저장소에 안전하게 기록된 상태
이 세 상태는 Git 프로젝트의 세 영역과 연결된다.
-
Git directory: Git이 메타데이터와 객체 데이터베이스를 저장하는 곳이다. 저장소의 핵심이며, clone을 하면 이 영역이 함께 만들어진다. -
Working tree: 특정 버전을 checkout 해서 실제 파일로 펼쳐 놓은 작업 공간이다. -
Staging area: 다음 커밋에 들어갈 파일 정보를 저장하는 영역이다. Git에서는index라고도 부른다.
기본 흐름은 단순하다.
- 워킹 트리에서 파일을 수정한다.
-
git add로 수정 내용을 staging area에 올린다. -
git commit으로 staging area의 내용을 Git directory에 영구 스냅샷으로 저장한다.
Linux에서 Git 설치
Ubuntu 계열에서는 다음처럼 설치할 수 있다.
$ sudo apt install git-all
설치 후에는 버전을 확인한다.
$ git --version
Git 설정 파일의 우선순위
Git 설정은 여러 위치에 저장될 수 있다.
-
/etc/gitconfig: 시스템 전체에 적용되는 설정 -
~/.gitconfig또는~/.config/git/config: 현재 사용자에게 적용되는 설정 -
.git/config: 현재 저장소에만 적용되는 설정
설정은 더 좁은 범위가 더 높은 우선순위를 갖는다. 예를 들어 현재 저장소의 .git/config는 사용자 전역 설정인 ~/.gitconfig보다 우선한다.
사용자 정보 입력
Git을 설치한 뒤 가장 먼저 해야 할 일은 사용자 이름과 이메일 주소를 설정하는 것이다. Git은 커밋할 때 이 정보를 사용한다.
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
--global 옵션은 현재 사용자 전체에 적용한다는 뜻이다. 프로젝트마다 다른 이름이나 이메일을 쓰고 싶다면 해당 저장소 안에서 --global을 빼고 실행하면 된다.
설정은 다음 명령으로 확인한다.
$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
도움말 보기
Git 명령어가 헷갈릴 때는 내장 도움말을 먼저 확인한다.
$ git help <verb>
예를 들어 config 명령이 궁금하면 다음처럼 볼 수 있다.
$ git help config
명령 옵션만 빠르게 확인하고 싶을 때는 -h를 붙인다.
$ git add -h
usage: git add [<options>] [--] <pathspec>...
-n, --dry-run dry run
-v, --verbose be verbose
-i, --interactive interactive picking
-p, --patch select hunks interactively
-A, --all add changes from all tracked and untracked files
Git은 명령이 많지만, 처음에는 config, init, clone, status, add, commit, log 정도만 익혀도 실습을 시작할 수 있다.