프로젝트 할때면 필수 요소인 버전관리. 버전관리도구 git의 사용법을 익혀보자
파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 소스 코드 외 컴퓨터 파일의 대부분을 버전 관리할 수 있다.
중앙집중식 버전 관리 시스템:
다수의 개발자와 함께 작업해야 하는 경우 시스템 파일을 관리하는 서바를 두고 클라이언트가 중앙 서버에서 파일을 받아 사용한다.
시스템 파일을 관리하는 서버에 문제가 생기면 모든 클라이언트는 작업을 수행할 수 없고 히스토리도 잃게된다.
분산 버전 관리 시스템:
저장소를 전부 복제한다. 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다.
클라이언트 중 하나를 골라 서버를 복원할 수 있어 클라이언트의 저장소는 모든 데어틀르 가진 진정한 백업이다.
지금부터 학습할 git은 이 분산 버전 관리 시스템에 속한다.
git의 특징과 장점에 대해서 알아본다.
스냅샷:
git과 다른 버전관리시스템의 가장 큰 차이점은 데이터를 다루는 방법이다.
대부분의 버전관리 시스템은 각 파일의 변화를 시간순으로 저장한다.
Git의 데이터는 파일 시스템의 스냅샷이다. 버전의 상태를 저장할 때마다 모든 파일의 상태를 기억한다.
단 변하지 않은 파일은 성능을 위해 이전 상태의 링크를 갖는다.
로컬 성능:
중앙 집중식과 다르게 로컬환경에서 버전의 히스토리를 확인하고 네트워크 없이 상태를 저장할 수 있어 속도가 탁월하다.
무결성:
체크섬이라는 가장 기본적인 데이터 단위를 사용해 데이터를 관리한다.
//TODO: 체크섬에대해 좀더 알아봐야겠다.
데이터 추가:
git은 데이터 추가를 할뿐 삭제, 되돌리기가 없다.
(실제 파일 시스템 삭제/복구가 불가능 하다는 말이 아님. 이후 자세히 설명하겠다.)
상태를 저장한 후에는 데이터를 잃어버리기 어렵다.
!ex
1. remote repository로부터 프로젝트를 clone -> git 디렉토리 만들어짐
2. branch를 만들어 checkout한 후 소스코드 수정 -> working 디렉토리에서 작업 수행
3. 수정된 소스코드(modified)를 stage 표시(staged) -> staging area
git은 curl, zlib open expat libiconv와 같은 의존 라이브러리를 가지고 있다.
$ yum install curl-devel expat-devel gettext-devel \
openssl-devel zlib-devel
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
라이브러리 설치 완료후 (git 웹사이트)[http://git-scm.com/download]에서 최신 스냅샷을 가지고 온후 컴파일하고 설치한다.
$ tar -zxf git-1.9.1.tar.gz
$ cd git-1.9.1
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info
git congif
라는 도구로 설정 내용을 확인하고 변경할 수 있다.$ git config --global user.name "Sejoong"
$ git config --global user.email sejoong@nhnent.com
편집기
$ git config --global core.editor emacs
Diff도구: Merge 충돌 해결
$ git config --global merge.tool vimdiff
설정 확인
$ git help <verb>
$ git <verb> -- help
$ man git-<verb>