Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

Git 기초 본문

버전관리/git

Git 기초

scarecrow1992 2020. 10. 18. 23:35

Git의 목표

  • 빠른 속도
  • 단순한 구조
  • 비선형적인 개발(수천개의 동시 다발적인 브랜치)
  • 완벽한 분산
  • Linux 커널 같은 대형 프로젝트에도 유용할것(속도나 데이터 크기 면에서)

Git은 2005년 탄생하고 나서 아직도 초기 목표를 유지 하고 있다.

그러면서 갈수록 개선되고있다.

 

Git 기초

  • Git의 핵심은 무엇일까? 이 질문은 Git을 이해하는데 매우 중요하다.
  • Git이 무엇이고 어떻게 동작하는지 이해한다면 쉽게 Git을 효과적으로 사용할 수 있다.
  • Git은 Sugversion이나 Perforce 같은 다른 VCS들과 인터페이스는 유사하지만 정보를 취급하는 방식이 다르다.

 

차이가 아니라 스냅샷

  • Subversion과 Subversion 비슷한 놈들과 Git의 가장 큰 차이점은 데이터를 다루는 방법에 있다.
VCS CVS, Subversion, Perforce, Bazzar 등
관리하는 정보가 파일들의 목록이다. 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다.

  • Git은 이런식으로 데이터를 저장하지도 취급하지도 않는다.
  • 대신 Git은 데이터를 파일 시스템 스냅샷으로 취급하고 크기가 아주 작다.
  • Git은 커밋하거나 프로젝트의 상태를 저장할때, 파일이 달라지지 않았다면 성능을 위해서 파일을 새로 저장하지 않는다.
  • 단지, 이전 상태의 파일에 대한 링크만 저장한다.
  • Git은 데이터를 스냅샷의 스트림처럼 취급한다.

  • 수정된게 없으면 저장하지 않는다는것이 Git이 다른 VCS와 구분되는점이다.

 

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

  • 거의 모든 명령이 로컬파일과 데이터만 사용하기 때문에 네트워크에 있는 다른 컴퓨터가 필요 없다.
  • CVCS는 대부분의 명령어가 네트워크의 속도에 영향을 받는다.
  • 프로젝트의 모든 히스토리가 로컬디스크에 있기 때문에 모든 명령이 순식간에 실행된다.
    • 가령, Git은 프로젝트의 히스토리를 조회할 때 서버 없이 조회한다.
    • 그냥 로컬 데이터베이스에서 히스토리를 읽어서 보여준다.
    • 그래서 매우 빠른속도로 히스토리를 조회할 수 있다.
    • 파일을 비교하기위해 리모트에 있는 서버에 접근하고 나서 예전 버전을 가져올 필요가 없다.
    • 즉, 오프라인 상태이거나 VPN에 연결하지 못해도 막힘없이 일 할 수 있다.
    • 비행기나 기차등에서 작업하고 네트워크에 접속하고 있지 않아도 커밋할 수 있다.

 

Git의 무결성

  • Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.
  • 체크섬은 Git에서 사용하는 가장 기본적인(Atomic) 데이터 단위이자 Git의 기본 철학이다.
  • Git없이는 체크섬을 다룰 수 없어서 파일의 상태도 알 수 없고 심지어 데이터를 잃어버릴 수도 없다.
  • Git은 SHA-1 해시를 사용하여 체크섬을 만든다.
    • 만들어진 체크섬은 40자 길이의 16진수 문자열이다.
    • 파일의 내용이나 디렉터리 구조를 이용하여 체크섬을 구한다.
    • SHA-1은 아래처럼 생겼다.
    • Git은 모든것을 해시로 식별하기 때문에 이런 값은 여기저기서 보인다.
    • 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.

 

세 가지 상태

  • Git을 이해하는데 매우 중요한 부분이다.
  • Git은 파일을 Committed, Modified, Staged 이렇게 세 가지 상태로 관리한다.
    • Committed : 데이터가 로컬 DB에 안전하게 저장된 상태
    • Modified : 파일이 수정되었지만 아직 로컬 DB에 커밋하지 않음
    • Staged : 현재 수정한 파일을 곧 커밋할것이라는 표시
  • 이 세가지 상태는 Git 프로젝트의 세 가지 단계와 연결되어 있다.
  • Git 디렉토리, 워킹 트리, Staging Area 이렇게 세가지 단계를 이해해해보자.

  1. Git 디렉토리
    • Git이 프로젝트의 메타데이터와 객체 DB를 저장하는 곳
    • 이 Git 디렉토리가 Git의 핵심이다.
    • 다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉토리가 만들어진다.
  2. 워킹트리(워킹 디렉토리)
    • 프로젝트의 특정 버전을 Checkout 한것이다.
    • Git 디렉토리는 지급 작업하는 디스크에 있고 그 디렉토리 안에 압축된 DB에서 파일을 가져와서 워킹트리를 만든다.
  3. Staging Area
    • Git 디렉토리에 있다.
    • 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다.
    • 종종 "index"라고 불리기도 하지만, Staging Area라는 명칭이 표준이 되어가고 있다.
  • Git으로 하는 일은 기본적으로 아래와 같다.
    1. 워킹 트리에서 파일을 수정한다.
    2. Staging Area에 파일을 Stage 해서 커밋할 스냅샷을 만든다.
    3. Staging Area에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장한다.
  • Git 디렉토리에 있는 파일들은 Committed 상태이다.
  • 파일을 수정하고 Staging Area에 추가했다면 Staged이다.
  • Checkout 하고나서 수정했지만 , 아직 Staging Area에 추가하지 않았으면 Modifed 이다.
  • 이 내용은 추후 좀더 자세히 배운다.

 

CLI

  • Git을 사용하는 방법은 많다.
  • Git의 모든 기능을 지원하는 것은 CLI 뿐이다.
  • GUI 프로그램의 대부분은 Git 기능 중 일부만 구현한다.
  • 그러므로 대부분의 설명은 CLI를 기준으로 이루어진다.
  • CLI를 제대로 다루기 위해선 Linux의 Terminal 이나 Windows의 CMD나 Powershell에 대한 지식이 필요하다.

'버전관리 > git' 카테고리의 다른 글

Git으로 파일 관리하기  (0) 2020.10.31
Git 저장소 만들기  (0) 2020.10.20
Git 설치 및 설정  (0) 2020.10.20
버전 관리 시스템(VCS; Version Control System)  (0) 2020.10.18
Comments