일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SQL
- 그래프
- Stored Procedure
- Dijkstra
- DP
- Hash
- union find
- 다익스트라
- Two Points
- MYSQL
- two pointer
- Trie
- String
- Brute Force
- 이진탐색
- 스토어드 프로시저
- binary search
Archives
- Today
- Total
codingfarm
Git 기초 본문
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 이렇게 세가지 단계를 이해해해보자.
- Git 디렉토리
- Git이 프로젝트의 메타데이터와 객체 DB를 저장하는 곳
- 이 Git 디렉토리가 Git의 핵심이다.
- 다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉토리가 만들어진다.
- 워킹트리(워킹 디렉토리)
- 프로젝트의 특정 버전을 Checkout 한것이다.
- Git 디렉토리는 지급 작업하는 디스크에 있고 그 디렉토리 안에 압축된 DB에서 파일을 가져와서 워킹트리를 만든다.
- Staging Area
- Git 디렉토리에 있다.
- 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다.
- 종종 "index"라고 불리기도 하지만, Staging Area라는 명칭이 표준이 되어가고 있다.
- Git으로 하는 일은 기본적으로 아래와 같다.
- 워킹 트리에서 파일을 수정한다.
- Staging Area에 파일을 Stage 해서 커밋할 스냅샷을 만든다.
- 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