Git 기본

13 October 2014

Git의 기본 특성

분산 버전 컨트롤 시스템 (DVCS)

  • 클라이언트가 파일의 마지막 스냅샷을 checkout 하는 것이 아니라, 저장소를 전부 복제한다.
  • 서버에 문제가 생기면 클라이언트 중 하나 가져다가 서버를 복원할 수 있음.

델타가 아니라 스냅샷을 통한 버전 관리

  • 각 버전이 각 파일에 대한 변화(델타)를 저장하는 일반적인 VCS과는 달리, 전체 파일 시스템의 현재 상태의 스냅샷을 저장함.
  • 파일이 달라지지 않았으면 이전 상태의 파일에 대한 링크만 저장함.

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

  • 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 실행 속도가 빠름
  • 오프라인에서도 작업 가능

해시를 통한 무결성

  • 모든 데이터를 저장하기 전에 해시를 구하고, 해시로 데이터를 관리함
  • 40자 길이의 16진수 문자열이며, 파일의 내용이나 디렉토리 구조를 이용하여 생성함
  • git은 모든 것을 해시로 식별, 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장함.
  • git 없이는 해시값을 알 수 없으므로 데이터를 알지도 잃어버릴 수도 없음

Git의 세 가지 상태

local 에서의 세 가지 area

  • working directory : 프로젝트의 특정 버전을 git 디렉토리로부터 checkout 한 것. 로컬 작업은 여기서 이루어진다.
  • staging area : 의미상으로는 area 이나, 단순한 파일로 이루어져 있다. 곧 커밋 할 파일들에 대한 정보를 저장한다.
  • git directory : local 저장소. 프로젝트의 메타데이터와, 압축된 파일들을 저장한다. 다른 컴퓨터에 있는 저장소를 clone 할 때 생성된다.

파일의 상태

  • untracked : git의 스냅샷에 존재하지 않는, 관리 대상이 아닌 파일. 새로 생성한 파일은 untracked 이다. git add 하면 tracked 상태로 바뀐다.
  • unmodified : tracked 상태이나, 수정 사항이 없는 상태. 즉 스냅샷의 파일과 워킹 디렉토리 내의 파일 내용이 동일한 상태.
  • modified : 워킹 디렉토리에서 파일을 수정한 상태.
  • staged : 워킹 디렉토리에서 수정한 파일을 stage area에 추가한 상태. git add 명령어로 추가할 수 있다. 커밋할 스냅샷을 만들기 위한 중간 상태.
  • commited : stage area에 있는 파일을 커밋해서 git 디렉토리에 영구적인 스냅샷으로 저장한 상태 => 커밋 후에는 다시 unmodifed 상태가 됨.

Git 설치 in Mac

https://code.google.com/p/git-osx-installer/

Git 초기 설정

git config 명령어로 설정 내용을 확인하고 변경할 수 있다. 이 때 사용하는 설정 파일은 세 가지가 있는데, 범위가 작은 설정 순으로 우선순위가 높다.

  • 우선순위 3) /etc/gitconfig : 시스템의 모든 사용자와 모든 저장소에 적용되는 설정. git config --system 명령으로 설정.
  • 우선순위 2) ~/.gitconfig : 현재 사용자에게만 적용되는 설정. (home 디렉토리 하위에 있으므로..) git config --global 명령으로 설정.
  • 우선순위 1) .git/config : git 디렉토리에 있는 파일. 특정 저장소 혹은 현재 작업중인 프로젝트에만 적용되는 설정. git config 명령으로 설정.

사용자 정보 설정

$ git config --global user.name "name"
$ git config --global user.email email@domain.com

설정 확인

git config --list	# 설정한 모든 것을 보여줌
git config {key}	# 해당 key에 대한 설정값을 보여줌 (예: git config user.name)

Git 도움말 보기

특정 명령어에 대한 도움말을 보려면 git help 명령어 or git 명령어 --help or man git-명령어 를 입력한다.

객체지향 / 절차지향 / 정보은닉 / 캡슐화 / 모듈화 Git 기본 명령어