Git은 버전 관리 시스템(VCS, Version Control System)중 하나이다.
더 정확하게 이야기하면 Git은 분산 버전 관리 시스템(DVCS, Distributed Version Control System)의 한 종류이다. 이것은 소스코드 등 파일의 변화를 관리하기 쉽게 해준다.
버전 관리 시스템(Version Control System)은 파일 변화를 시간에 따라 기록하고 원할때 다시 불러올 수 있는 시스템이다. 많은 사람들이 버전을 관리하기 위해 이것을 이용한다. 이러한 "버전 관리 시스템"은 크게 4가지로 볼 수 있다.
제대로된 VCS가 나오기 전, 많은 사람들은 버전 관리를 위해 디렉토리에 파일을 복사하는 방법을 사용하였다. 이 방법은 간단하고 사용하기 쉽지만 그만큼이나 문제가 생길 가능성이 높다. 작업하던 디렉토리를 삭제하거나, 파일을 잘못 고치거나 또는 잘못 복사하는 등 많은 문제가 생길 수 있다.
디렉토리 버전 관리의 단점을 보완하기 위해 처음 사용된 VCS(Version Control System)가 바로 로컬 VCS이다.
로컬 VCS는 아주 간단한 데이터베이스(Database)를 사용해서 파일의 변경 정보를 관리한다.
로컬 버전 관리 시스템(Local Version Control Systems)은 데이터베이스(Database)를 통해 디렉토리 버전 관리의 단점을 보완했다. 하지만 프로젝트를 진행하는 등 다른 개발자와 협업이 필요한 작업에는 적합하지 않다.
협업 문제를 해결하기 위해 개발된 것이 중앙집중식 버전 관리 시스템(CVCS, Centralized Version Control System)이다.
CVCS는 파일을 관리하는 서버를 별도로 두고, 클라이언트가 중앙 서버에서 파일을 받아서 사용한다.
중앙집중식 버전 관리 시스템(Centralized Version Control Systems)은 관리자에 의한 서버 관리가 가능하며 쉽게 협업할 수 있다는 장점이 있다. 하지만 이 방법에도 치명적인 결함이 하나 있는데, 그것은 바로 중앙 서버에 문제가 발생하면 아무도 작업을 수행할 수 없다는 것이다. 또한 중앙데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃을 수 있다.
중앙집중식 버전 관리 시스템의 결함을 보완하기 위해 개발된 것이 바로 분산 버전 관리 시스템 (DVCS, Distributed Version Control Systems)이다. DVCS는 파일을 관리하는 서버가 따로 존재할 뿐 아니라 저장소를 로컬 컴퓨터에 복사하여 사용한다.
분산 버전 관리 시스템 (DVCS, Distributed Version Control Systems)은 서버에 문제가 생기더라도 복사본의 데이터를 이용하여 다시 작업을 시작할 수 있다. 또한 대부분의 DVCS 환경에는 리모트 저장소가 존재한다. 사람들은 이 저장소를 이용하여 다양한 방법으로 협업을 할 수 있다.
Git을 사용하는데 있어 자주 사용되는 용어들을 알아보자.
파일이 저장되는 저장소이다, 파일이 저장되는 위치에 따라 로컬 저장소(Local Repository)와 원격 저장소(Remote Repository)로 나눌 수 있다.
아래 그림과 같이 Remote 저장소에서 파일을 가져오고(Clone), Commit을 통해 Local 저장소에 저장할 수 있다. Push를 하면 Remote 저장소에도 저장이 가능하다.
출처: https://support.nesi.org.nz/hc/en-gb/articles/360001508515-Git-Reference-Sheet
Working Directory에서 작업한 내용을 Staging Area에 추가해준다. Staging Area에서 선별적으로 원하는 파일을 저장소에 commit할 수 있다.
Staging Area에 추가된 내용중 선별적으로 선택하여 Local Repository에 저장하는 과정 이다. 각각의 commit에는 commit에 대한 정보(날짜, 시간, 제목, 내용 등)를 같이 저장할 수 있다.
Local Repository에 있는 파일을 Remote Repository에 저장하는 과정이다. commit을 통해 저장한 스냅샷을 그대로 원격 저장소에 저장하여 관리할 수 있다.
Push와 반대로 Remote Repository에 있는 내용을 가져와 Local Repository에 저장하는 과정이다. 이를 통해 다른 사람이 Push한 내용을 가져와서 작업을 이어갈 수 있다.
Commit의 쉽게 접근할 수 있도록 붙여놓은 이정표이다. 태그를 통해서 쉽게 체크아웃을 이용할 수 있다.
특정 시점의 commit으로 이동하는 것을 의미한다. 체크아웃을 통해 과거의 여러 commit을 확인할 수 있으며 branch 생성 및 삭제, 수정 등 다양한 작업을 할 수 있다.
Commit을 기준으로 구분된 파일을 분기로 나누어 새로운 commit을 만들 수 있는 가지, 가지들의 모임을 브랜치(Branch)라고 한다.
출처: https://www.w3docs.com/learn-git/git-branch.html
브랜치중 주축이 되는 브랜치를 마스터 브랜치(Master Branch)라고 부른다. 모든 브랜치는 마스터 브랜치에서 분기되고 최종적으로 마스터 브랜치에 병합(Merge)된다. 브랜치를 통해 다양한 시도가 가능하며 병합(Merge)기능을 통해 Master에 수정사항을 반영할 수 있다.
Git은 분산 버전 관리 시스템이며 우리가 사용하는 파일들의 버전을 쉽게 관리할 수 있게 해준다.
이를 통해 파일들을 체계적으로 관리할 수 있으며, 병렬 개발을 통해 다른 사람과 쉽게 협력할 수 있다.
우리는 이렇게 간단하게 Git의 정의와 특징, 관련된 용어들을 알아보았다.
이를 토대로 다음에는 Git 사용법과 원격저장소인 Github에 대해서 알아보자.