버전 관리란?

버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.

로컬 버전 관리

  • RCS(Revision Control System)

    • 이 Patch Set은 특별한 형식의 파일로 저장한다

    • 일련의 Patch Set을 적용해서 모든 파일을 특정 시점으로 되돌릴 수 있다.

중앙집중식 버전 관리(CVCS)

  • 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용하는 방식

  • 장점

    • 모두 누가 무엇을 하고 있는지 알 수 있다.

    • 관리자는 누가 무엇을 할지 꼼꼼하게 관리할 수 있다.

    • 모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 VCS 하나를 관리하기가 훨씬 쉽다

  • 단점

    • 중앙 서버에 문제가 발생하면 아무 것도 할 수 없다.

    • 중앙 데이터 베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃게 된다.

분산 버전 관리 시스템

  • 파일의 마지막 스냅샷이 아니라 저장소 전부를 복제하는 방식

  • 서버에 문제가 생기더라도 아무 클라이언트의 복제물로 서버를 복원할 수 있다.

  • 계층 모델 같은 중앙집중식 시스템으로는 할 수 없는 워크플로우를 다양하게 사용할 수 있다.

짧게 보는 git의 역사

깃의 지향점

  • 빠른 속도

  • 단순한 구조

  • 비선형적인 개발(수천 개의 동시다발적 브랜치)

  • 완벽한 분산

  • 대형 프로젝트에도 유용할 것(속도나 크기 면에서)

git 기초

차이가 아니라 스냅샷

  • git은 데이터를 파일 시스템 스냅샷으로 취급하고 크기가 아주 작다.

  • git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.

  • 파일이 달라지지 않았으면 git은 성능을 위해서 파일을 새로 저장하지 않는다.

    (단지 이전 상태의 파일에 대한 링크만 저장한다)

  • git은 데이터를 스냅샷의 스트림처럼 취급한다.

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

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

  • 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 모든 명령을 순식간에 실행한다.

    • git은 프로젝트의 히스토리를 조회할 때 서버까지 가지 않고 로컬 데이터베이스에서 읽어서 보여준다

    • 즉, 오프라인 상태여도 일할 수 있다

    • 물론, 커밋은 할 수 없다

git의 무결성

  • git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.

  • 체크섬

    • git에서 사용하는 가장 atomic한 데이터 단위이자 git의 기본 철학

    • git은 SHA-1 해시를 사용하여 체크섬을 만든다.

    • 만든 체크섬은 40자 길이의 16진수 문자열

    • 파일의 내용이나 디렉토리 구조를 이용하여 체크섬을 구한다.

  • git은 파일을 이름으로 저장하지 않고 해당 파일의 해시(체크섬)으로 저장한다.

git은 데이터를 추가할 뿐

  • git으로 뭘 하든(특히 커밋) git 데이터베이스에 데이터가 추가된다.

  • 되돌리거나 데이터를 삭제할 방법은 없다.

세 가지 상태

파일의 상태

  • Committed

    • 데이터가 로컬 데이터베이스에 안전하게 저장되었다는 의미

    • git 디렉토리에 있는 파일들은 committed 상태이다.

  • Modified

    • 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않았다는 의미

    • checkout 후에 수정했으나, 아직 staging area에 추가하지 않았다면 modified 상태이다.

  • Staged

    • 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태

    • 파일을 수정하고 staging area에 추가했다면 staged 상태이다.

git 디렉토리

  • git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳(git의 핵심)

워킹 디렉토리

  • 프로젝트의 특정 버전을 checkout한 것

git디렉토리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와 워킹 디렉토리를 만든다.

Staging Area

  • 깃 디렉토리에 있다.
  • 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다.
  • 인덱스라고 불리기도 한다.

git의 workflow

  1. 워킹 디렉토리에서 파일을 수정한다
  2. staging area에 파일을 stage해서 커밋할 스냅샷을 만든다.
  3. staging area에 있는 파일들을 커밋해서 git 디렉토리에 영구적인 스냅샷으로 저장한다.

git 설치

리눅스에 설치

  • 데비안류 배포판

    sudo apt-get install git

소스 코드로 설치하기

  • 가장 최신 버전이 필요하면 소스 코드로 설치하는 것이 좋다.

  • git을 설치하려면 다음과 같은 라이브러리들이 필요하다.

    • curl

    • zlib

    • openssl

    • expat

    • libiconv

  • 데비안류 시스템에서는 아래의 명령어로 패키지들을 설치할 수 있다.

    sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev
  • 다양한(doc, html, info) 형식의 문서를 이용하려면 아래의 의존 패키지도 필요하다.

    sudo apt-get install asciidoc xmlto docbook2x
  • 위의 패키지들이 준비되면 최신 배포 버전을 받아 컴파일하고 설치한다.

    tar -zxf git-2.0.0.tar.gz
    cd git-2.0.0
    make configure
    ./configure --prefix=/usr
    make all doc info
    sudo make install install-doc install-html install-info

git 최초 설정

  • git config라는 도구로 설정 내용을 확인하고 변경할 수 있다.
  1. /etc/gitconfig파일

    • 시스템의 모든 사용자와 모든 저장소에 적용되는 설정

    • git config --system옵션으로 이 파일을 읽고 쓸 수 있다.

  2. ~/.gitconfig, ~/.config/git/config파일

    • 특정 사용자에게만 적용되는 설정

    • git config --global 옵션으로 이 파일을 읽고 쓸 수 있다.

    • 윈도우에서는 $HOME(C:\Users$User)디렉토리에서 .gitconfig파일을 찾는다.

  3. .git/config파일

    git디렉토리에 있고 특정 저장소(혹은 현재 작업 중인 프로젝트)에만 적용된다.

  • 3->2->1순으로 우선순위가 적용된다.

사용자 정보

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

  • git은 커밋할 때마다 이 정보를 사용한다.

  • 한번 커밋한 후에는 정보를 변경할 수 없다.

    git config --global user.name "머시기"
    git config --global user.email mail@mail.mail
  • 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶다면, --global 옵션을 빼면 된다.

편집기

  • 사용자 정보를 설정한 후에는 git에서 사용할 텍스트 편집기를 고른다.

  • 기본적으로 git은 시스템의 기본 편집기(보통 Vi나 Vim)를 사용한다.

  • Emacs 같은 다른 텍스트 편집기를 이용하고자 한다면 아래와 같은 명령어로 지정 가능하다.

    git config --global core.editor emacs

설정 확인

  • git config --list 로 설정 내용을 확인할 수 있다.

  • git은 같은 키를 여러 파일에서 읽기 때문에 같은 키가 여러 개 있을 수도 있다.
    (위에서 봤던 여러 config파일이 존재하기 때문)

  • 이때는 나중 값을 사용한다

  • "git config 키이름"으로 git이 특정 키에 대해 어떤 값을 사용하는지 확인 가능하다.

    ex : git config user.name

도움말 보기

  • git help 명령어

  • git 명령어 --help

  • man git-명령어

0개의 댓글

Powered by GraphCDN, the GraphQL CDN