git이란 무엇인가?
16 May 2018 | git패스트캠퍼스 웹 프로그래밍 수업을 듣고 중요한 내용을 정리했습니다.
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
이 포스팅에서는git
에 대해 알아보며, git에서 사용하는 주요 용어에 대해서 설명합니다.
Git?
git
은 분산형 버전 관리 시스템(DVCS, Distributed version control system)이며 C언어로 구현되었다.
이전 포스팅에서 공부한 바로, 버전 관리 시스템은 사용자가 어떤 파일 집합에 대한 히스토리를 생성하고 관리할 수 있도록 도우며 특정 다른 상태(어느 시점)으로 복귀(revert
)할 수 있는 기능을 가지고 있다.
이때 파일 집합은 주로 소스코드들이다.
분산 버전 관리 시스템에서 모든 사용자는 완벽한 복사본을 가지고 있으며(소스코드에 대한 히스토리를 포함) 버전 관리 명령어들을 각 사용자의 로컬에서 실행할 수 있다. 이때 DVCS
는 중앙 저장소 사용을 항상 요구하지 않는 장점을 갖는다.
주요용어 정리
Repository - 저장소
저장소는 히스토리, 시간/태그(tag)/분기(Branch)에 따라 다른 버전들을 가지고 있다.
git에서 저장소를 다른곳으로 복사하더라도 다시 완벽한 저장소가 되고, 작업하고 있는 복사본으로 수정본들을 얼마든지 검색할 수 있다.
- remote repository git으로 관리하던 것을 이전까지는 local에서만 했다면 이제는 누구든지 볼 수 있는 서버 공간에서 사용하는 것
Branch & Tag - 분기와 태그
git 저장서는 모든 분기들과 태그들을 가지고 있다. 분기들 중 하나는 master
라고 불리는 기본 분기이다.
사용자는 작업에 필요한 어떤 한 버전의 분기를 이 기본분기로 체크아웃(Checkout
)한다. 이것을 작업카피 (Working Copy
)라고 한다.
Commit - 커밋
어떤 기록의 단위, 스냅샷, 이러한 스냅샷을 이동할 수 있는 단위
소스 수정사항들은 저장소로 커밋할 수 있다.
이것은 지난 시간까지 추적된 것에 대한 새로운 리비전(Revision
)을 만드는 것이다. 각 커밋은 저자와 커밋한 내용(어떻게 수정했는지, 누가 커밋했는지)을 저장한다.
즉, 내가 작업을 하면서 기능상의 의미가 생길때, 기능상의 의미있는 변화가 생길때 주로 남긴다.
Revision - 리비전
소스코드의 버전을 가리킨다.
git
은 SHA1 ids
로 리비전을 구분한다. SHA1 ids
는 160비트로 긴 편이고 16지수로 표현된다. 가장 최신버전은 HEAD
로 불리는 주소로 표현되며 이전 버전은 HEAD~1
으로 계속 그런 방식으로 버전이름을 가리킬 수 있다.
Snapshot - 스냅샷
파일들의 변경사항을 저장하는 순간.
git
은 commit
하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.
파일이 달라지지 않았으면 git
은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. git
은 데이터를 스냅샷의 스트림처럼 취급한다.
Stream - 스트림
흐름 데이터 세트 간에서 데이터의 전송이 실행되고 있는 것으로, 문자 형식의 데이터 항목이 연속한 열로 되어 있는 것이다.
Configuration
배열, 배치, 환경상태
Initialize
초기 내용을 설정하는 것
Pointer - 포인터
다른 객체(=단위 1개)를 가리키기 위해 존재하는 자료형
이 안에 든 자료는 문자, 숫자도 아무것도 아니고 그냥 ‘나는 어떤 커밋을 가리키고 있어’라는 의미를 가진다.