Home

[Git] Pro Git 2/E. Chapter 1

Pro Git 2/E

Pro Git 2/E

날짜: 2019.07.10

Chapter1. 시작하기

목차

버전 관리란?

  • 버전 관리 시스템(VCS - Version Control System)은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템을 말한다.
  • VCS를 사용하면 파일을 이전 상태로 되돌릴수 있고, 시간에 따라 수정 내역을 볼 수 있으며 누가 문제를 일으켰는지도 찾을 수 있으며 문제가 발생 했을때 이전 버전으로 쉽게 돌아 갈 수 있다. (범인 색출과 복구!!)
  • 로컬 버전 관리

    • 최종본.txt, 진짜 최종본.txt과 같이 사용하는 것을 로컬 버전 관리 라고 할수 있다.
    • 초기 간단한 데이터 베이스를 이용하여 VCS가 만들어 졌다.
  • 중앙집중식 버전 관리(CVCS)

    • 클라이언트가 서버에서 파일을 받아서 작업하는 형태.
    • SVN이 이러한 형태를 가지고 있다.
    • 서버에 문제가 발생할 경우 문제가 커진다. 모든 정보가 서버에 저장되어 있기 때문에 서버에 문제가 생기면 클라이언트에서 대응이 힘들다.
  • 분산 버전 관리(DVCS)

    • Git, Mecurial, Bazaar, Darcs 같은 프로그램
    • 클라이언트는 마지막 스냅샷을 checkout하지 않고 저장소 전체를 복사한다. 이는 서버에 문제가 생겨도 클라이언트에는 문제가 없다. Checkout은 모든 데이터를 가진 백업이라고 볼수 있다.
    • 대부분의 DVCS는 리모트 저장소를 가지고 있다.

짧게 보는 Git의 역사

  • 리눅스 개발에서 VCS를 사용하였는데, 사용한 VCS가 사용버전 이였다. 돈문제로 인하여 사용하던 VCS를 사용하기 힘들어 졌고 이 때문에 새로운 VCS를 개발하기 시작하였다. 이때 만들어 진것이 Git이다.
  • Git은다음과 같은 목표를 가지고 만들어졌다.

    • 비선형적인 개발(수천 개의 동시다발적인 브랜치)
    • 빠른 속도
    • 단순한 구조
    • 완벽한 분산
    • 대형 프로젝트에도 유용할 것

Git의 기초

  • 스냅샷

    • Git과 다른 VCS의 가장 큰 차이점은 데이터를 다루는 방법이다. CVS, Subersion 등의 시스템은 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다. 하지만 Git은 데이터를 파일 시스템 스냅샷으로 취급하고 그 크기가 매우 작다. 파일이 달라지지 않으면 Git은 성능을 위해 파일을 새로 저장하지 않는다. 단 이전 상태의 파일에 대한 링크만 저장한다.
    • Git은 데이터를 스냅샷의 스트림처럼 취급한다. (아직 이해가 가질 않는다.)
  • 거의 모든 명령을 로컬에서 실행한다.

    • Git의 거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크가 필요 없다.
    • 또한 프로젝트의 모든 히스토리가 로컬에 저장하기 때문에 모든 명령을 빠르게 실행 할 수 있다.
  • Git의 무결성

    • Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.
    • 체크섬이 없이는 어떠한 파일이나 디렉토리도 변경 할 수 없다.
    • SHA-1 해시를 이용해 체크섬을 만들며 40자 길이의 16진수 문자열로 이루어진다.
  • Git은 데이터를 추가할 뿐

    • Git으로 무엇을 하든 Git 데이터베이스에 데이터가 추가된다.
    • 일단 commit을 하게 되면 데이터를 잃을 가능성은 적다.
  • 세가지 상태

    • Committed, Modified, Staged 상태로 관리된다.
    • Committed
    • 데이터가 로컬 데이터 베이스에 안전하게 저장 되었다는 것을 의미한다.
    • Modified
    • 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
    • Staged
    • 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태이다.
    • 이 세 가지 상태는 Git 프로젝트의 세 가지 단계와 연결되어 있다.
    • Git 디렉토리

      • Git이 프로젝트의 메타데이터와 객체 데이터 베이스를 저장하는 곳을 말한다.
      • 다른 저장소에 있는 프로젝트를 Clone 할때 Git 디렉토리가 만들어 진다.
    • 워킹 디렉토리

      • 프로젝트의 특정 버전을 Checkout한 것이다.
      • 즉 어떤 프로젝트의 브랜치를 checkout하면 데이터베이스에서 파일을 가져와 워킹 디렉토리가 만들어진다.
    • Staging Area

      • Git 디렉토리 안에 존재하며 커밋할 파일에 대한 정보를 저장한다.
    • Git 디렉토리에 있는 파일들은 Committed된 상태이며, 파일을 수정하고 Staging Area에 추가 헀다면 Staged된 상태이다. 그리고 Checkout하고 나서 수정했지만 아직 Staging Area에 추가하지 않았다면 Modified된 상태인것이다.

CLI

  • 별 내용 없어서 생략

Git 설치

  • 이미 설치되어 있고 간단하므로 생략

Git 최초 설정

  • Git은 설치후 최초 한번만 설정하면 된다.
  • git config 라는 도구를 이용한다.
  • 설정은 3가지 단계로 이루어 진다.

    • /etc/gitconfig file

      • 시스템의 모든 사용자와 모든 저장소에 적용되는 설정
      • git config --save로 읽고 쓸 수 있다.
    • ~/.gitconfig, ~/.config/git/config

      • 특정 사용자에게만 적용되는 설정
      • git config --global로 읽고 쓸 수 있다.
    • .git/config file

      • Git 디레톡리에 존재하며 특정 저장소(혹은 현재 작업중인 프로젝트)에만 적용된다.
      • 나 같은 경우 회사 컴퓨터로 작업을 많이 하는데 global 설정으로 회사 git을 설정하고, 개인 프로젝트는 위 설정으로 해놓았다.
  • 설치 후 설정은 사용자의 이름과 이메일 주소만 설정하면 된다. 글로벌 설정은 초기 한번만 해주면 된다.

    git config --global user.name "changhyun lim"
    git config --global user.email "dev.select995@gmail.com"
  • 설정 보기

    git config --list
    ## 설정이 여러개 있을 경우 나중에 읽은 설정이 표시 된다.

도움말 보기

  • 다음 명령어로 도움말을 볼 수 있다.
git help <verb>
git <verb> --help
man git <verb>
Loading script...