본문 바로가기

책/프로 Git

Git의 시작

Git 기초

델타가 아니라 스넵샷

대부분의 VCS(Version Control System)은 각 파일의 변화를 시간순으로 관리하는데 반해 Git은 시간순으로 프로젝트의 스냅샷을 저장한다.  Git의 데이터는 파일 시스템의 스냅샷으로 크기가 아주 작다. 

 

거의 모든 명령을 로컬에서 실행

거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크에 있는 컴퓨터는 필요없다.

  • 프로젝트 히스토리를 조회할 때 서버없이 조회한다.
  • 오프라인 상태에서도 비교할 수 있고, 커밋도 가능하다.

Git의 무결성

Git은 모든 데이터를 저장하기 전에 체크섬(또는 해시)을 구하고 체크섬으로 데이터를 관리한다. 체크섬 없이 어떠한 파일이나 디렉터리도 변경할 수 없다. 

 

Git은 SHA-1 해시를 사용하여 체크섬을 만든다. 체크섬은 40자 길의의 16진수 문자열이다. 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.

Git은 데이터를 추가할 뿐

Git은 무얼 하든 데이터를 추가한다. 되돌리거나 데이터를 삭제할 방법이 없다. 따라서 스냅샷을 커밋하고 나면 데이터를 잃어 버리기 어렵다.

세가지 상태

세가지 상태

  • Commited : 데이터가 로컬 데이터베이스에 안전하게 저장됬다는 것을 의미한다.
  • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 의미한다.
  • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다. 

세가지 단계

  • Git 디렉터리 : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
    • Git 디렉터리가 Git의 핵심
    • 다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉터리가 만들어진다.
  • Working 디렉터리 : 프로젝트의 특정 버전을 Checkout한 것
    • Git 디렉터리는 지금 작업하는 디스크가 있고,
    • 그 디렉터리에 압축된 데이터베이스에서 파일을 가져와서 Wokring 디렉터리를 만든다.
  • Staging Area : Git 디렉터리에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다.
    • 종종 인덱스라고 불리기도 한다.

Git으로 하는일

  • Working 디렉터리에서 파일을 수정한다.
  • Staging Area에 파일을 Stage해서 커밋할 스냅샷을 만든다.
  • Staging Area에 있는 파일들을 커밋해서 Git 디렉터리에 영구적인 스냅샷으로 저장한다.

 

Git 최초 설정

Git을 설치하고 나면 Git의 사용환경을 적절하게 설정해 주어야 한다.

  • 한번만 설정하면 된다.
  • 설정한 내용은 Git을 업그레이드 해도 유지된다.

Git의 설정파일

  • /etc/gitconfig 파일
    • 시스템의 모든 사용자와 모든 저장소에 적용되는 설정
    • git config --system 옵션으로 이 파일을 읽고 쓸 수 있다. 
  • ~/.gitconfig 파일
    • 특정 사용자에게만 적용되는 설정
    • git config --global 옵션으로 이파일을 읽고 쓸 수 있다.
  • .git/config 파일
    • Git 디렉터리가 있고 특정 저장소(혹은 현재 작업중인 프로젝트)에만 적용된다.
    • 각 설정은 역순으로 우선 시 된다. 그래서 .git/config가 /etc/gitconfig보다 우선한다.

윈도용 Git

  • $HOME 디렉터리(C:\Documents and Settings\$USER)에 있는 .gitconfig 파일을 찾는다. 
  • msysGit 에도 /etc/gitconfig가 있지만 MSys 루트에 따른 상대경로다.
  • 인스톨러로 msysGit을 설치시 설치 경로를 선택할 수 있다.

사용자 정보

Git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자 이름과 이메일 주소를 설정하는 것이다. 

  • Git은 커밋할 때마다 이 정보를 사용한다. 
  • 한번 커밋한 후에는 정보를 변경할 수 없다.
  • --global 옵션으로 설정한 것은 딱 한 번만 하면 된다.
$ git config --global user.name "abst"
$ git config --global user.email "abscractask@gmail.com"

 

만약 프로젝트마다 다른이름, 다른이메일주소를 사용하고 싶으면 --global 옵션을 빼고 명령을 실행한다.

$ git config user.name "otherUser"
$ git config user.email "otherUser@gmail.com"

편집기

git의 기본 편집기는 Vim 이지만 변경하고 싶으면 다음과 같은 명령어를 사용하면 된다.

$ git config --global core.editor emacs

Diff 도구

vimdiff 를 사용하고 싶으면 다음과 같이 설정하면 된다.

$ git config --global merge.tool vimdiff

설정 확인 

git config --list 명령어를 사용한다.

  • Git은 같은 키를 여러 파일(/etc/gitconfig, ~/.gitconfig)에서 읽기 때문에 같은키가 여러 개일 수도 있다. 이러면 Git은 가장 나중 값을 사용한다.
C:\Users>git config --list
core.symlinks=false
core.autocrlf=true
...
user.name=abst
user.email=abstractask@gmail.com
core.autocrlf=true

 

git config {key} 명령어를 사용한다.

C:\Users>git config user.name
abst

도움말 보기

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

 

예를 들면 다음과 같다.

$ git help config