1. 버전관리
Git은 linux를 만든 리눅스토발즈가 제작한 분산버전관리시스템(DVCS)이다. 현재 IT분야에서 Git을 이용해, 프로그램 만드는 것을 협업하고 버전을 관리하고 있어서, IT분야에 종사하고 있는 종사자나, 곧 IT분야로 뛰어들 학생들이라면, 꼭 학습해야 하는 프로그램 이다.
먼저, 버전관리 시스템에 대해 알아보자.
버전 관리 시스템(VCS)은 파일변화를 시간에 따라 기록했다가, 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. VCS의 장점은 다음과 같다.
- 각 파일을 이전 상태로 되돌릴 수있다.
- 시간에 따라 수정 내용을 비교해 볼 수 있다.
- 누가 문제를 일으켰는지 추적할 수 있다.
- 언제 만들어진 이슈인지 알 수 있다.
- 파일을 읽어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.
...
위 장점들로 보아하니, VCS를 사용하면 프로젝트의 관리가 편해진다는 점을 알 수 있다. 초기에 많은 사람들은 버전을 관리하기 위해 디렉토리로 파일을 복사하는 방법을 사용하였다. 이 방법은 매우 간단하지만, 실수로 인한 피해를 볼 수 있다. 예를 들어 작업하던 디렉토리를 지워버리거나, 실수로 파일을 잘 못 고칠수도 있고, 잘못 복사할 수도 있다.
그래서 여러가지 다른 버전 관리 시스템(CVCS, DVCS)등이 개발되어 내려왔다. 그중에 Git은 DVCS로 중앙데이터베이스에 버전도 관리하면서, 각각의 클라이언트들도 저장소와 히스토리를 갖고있어 중앙에 서버에 문제가 생겨도 서버를 복원할 수 있는 것이다.
2. git의 탄생
2002년 Linux커널은 BitKeeper라고 불리는 DVCS를 통해서 버전관리를 시작했다. 그러나 오픈소스를 추구하는 Linux와 금전적 이익을 추구하는 BitKeeper의 무료 사용을 못하게 되면서, Linux 개발 커뮤니티(특히 Linux 창시자 Linus Torvalds)가 자체 도구를 만드는 계기가 됐다.
3. git의 기초
큰 틀에서 봤을 때 VCS 시스템 대부분은 관리하는 정보가 파일들의 목록이다. CVS, Subversion, Perforce, Bazaar 등의 시스템은 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다(보통 델타 기반 버전관리 시스템이라 함).
Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 아주 작다. Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.
4. git의 3가지 상태
git은 파일을 commited, Modified, Staged 이렇게 세가지 상태로 관리한다.
- Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.
- Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
- Staged란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.
git directory는 git 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이 git directory가 git의 핵심이다. 다른 컴퓨터에 있는 저장소를 clone 할때 git 디렉토리가 만들어진다.
Git의 큰 흐름은 다음과 같다.
1. git directory를 생성하여, 버전관리를 시작한다.
2. working tree에서 파일을 수정한다.
3. Staging Area에 파일을 Stage(추가)하여, Commit할 스냅샷을 만든다.
4. Staging Area에 만든 스탭샷을 Commit 하면 Git 디렉토리에 영구적인 스냅샷으로 저장한다.
5. 지속적으로 버전관리를 진행한다. (다시 2번으로 돌아가서 과정을 반복한다.)
이론개념만 읽게되면, 편하다는 것은 알지만, 확실하게 인식되지 않는다. 직접 git을 운용해보고, 체험해 보아야 Git의 대단함을 느낄 수 있을 것이다. 다음 시간에는 git을 운용해보기에 앞서서 github에 대해서 간단히 포스팅 하겠다.
[참조] https://git-scm.com/book/ko/v2/
'서비스개발(Web, App) > DevOps' 카테고리의 다른 글
0. 프롤로그 (0) | 2020.09.06 |
---|---|
1. [애자일] 전통적 프로젝트에서 벗어나기 (0) | 2020.08.15 |
머릿말, 애자일 & 스크럼 프로젝트 관리 (0) | 2020.08.01 |