1. Git 이란 ?
- 처음 간단하게 알고 있던 Git은 나의 소스 코드를 저장해놓는 저장소 정도 였다.
- 뭐 저 용도로만 사용할 수도 있긴 하겠지만 Git에 대해 제대로 알아보자.
- 사실, Git 이란 Version Control System의 한 종류 이다 (VCS)
- 버전 관리 시스템이라고 하는데, 버전을 관리한다는 것은 말그대로
- 프로젝트 소스의 초창기 버전, 수정 버전(V2), 재수정 버전(V2), 최종 버전(FINAL)
- 이런식으로 여러파일들을 하나의 버전으로 묶어 관리하는 것.
1 - 1 그래서 Version Control System(버전 관리 시스템) 이 무엇이냐?
- 위의 예시처럼 파일을 관리하는 것( 관리가 어려움, 명칭에 따른 혼동 등... 여러가지 문제점 내포 )을
전문적으로 관리하는 시스템이 버전 관리 시스템 이다.
-(1) 클라이언트-서버 모델
- 중앙서버가 존재, 자신의 파트만 가져와서 작업후 다시 중앙서버로 통합.
-(2) 분산 모델
- 중앙서버가 존재, 그러나 여러 클라이언트들은 각자의 로컬 저장소에 중앙서버의 전체 사본을 가지고 작업 후
통합하는 것
- Git이 이에 해당 한다.
2. Git의 사용
- 사실 혼자 작업한다면 사본을 만들어 놓고 개인이 관리 하면서 작업을 수행한다면 굳이 필요가 없을 수도 있다.
(수정이나 작업을 하는 사람이 본인 뿐이므로 시간적인 충돌등이 발생할 일도 없다.)
- 그러나 만약 다수의 클라이언트들이 작업을 수행하고 그것을 원본에 업데이트를 해야 하는데
동시에 수정과 다운로드 작업이 일어나거나 한다면 문제가 생긴다.
(예를 들면 내가 수정을 업로드 하는 동시에 다른 클라이언트가 작업을 위해 그 페이지를 건드린다면
나의 수정사항이 제대로 반영되지 않을 수 있는 등의 문제가 발생 할 수 있다.)
- 이러한 문제점을 방지해주는 것이 버전관리 시스템이다(git,....)
- 그리고 깃은 모든 변동사항의 스냅샷을 저장하므로 코드의 손실이 일어나지 않고 문제시
그 이전의 시점으로 되돌릴 수도 있다.(병렬 개발이 가능해 진다.)
- 그러므로 다수와 함께하는 프로젝트를 진행할 때 Git은 거의 필수적이다.
- 물론 개인프로젝트의 경우도 git으로 버전관리를 진행하면서 수행하면하면 체계적인 개발이 가능하다.
(프로그램 을 배포하고나 패치를 배포하는 것도 간단해진다.)
3. Git의 웹 기반 솔루션
- Git의 원격 저장소를 편하고 효율적으로 관리할 수 있게 하는 것이 웹기반 Git 솔루션을 사용하는 것.
- 요즘은 원격 저장소를 관리하는 기능 뿐 아니라 프로젝트에 도움이 되는 다양한 기능을 제공 하고 있다.
- Git Hub, Git Lab 등 이 있는데 깃허브는 오픈소스 프로젝트를 할 때 주로 많이 사용하고,
깃 랩은 기업체등에서 폐쇄성을 필요로 할 때 인트라넷에서 많이 사용한다.
4. Git 사용을 위한 주요용어 정리
- 저장소(Repository)
: 소스코드가 저장되어 있는 물리적인 공간
깃 에서는 위에서 말씀드렸다 싶이 로컬저장소와 원격저장소 두개로 나누어져 있습니다.
그러므로 작업을 시작하기 전에 원격저장소에서 로컬저장소로 소스코드를 복사해오고
그 로컬저장소에서 소스를 가지고와서 소스수정이나 작업이 이루어 집니다.
수정 후 커밋(commit)을 하면 로컬저장소에 저장(수정) 되며, 푸시(push)를 해야 비로소
원격저장소에 반영이 되는 것입니다.
저장소는 브랜치(branch),태그, 커밋에 따라서 버전을 저장한다.
- 스테이지(stage)
작업한 내용을 올리는 임시 저장영역
커밋 시에 로컬저장소에 반영이 된다.
- 커밋(commit)
스테이지의 내용을 로컬저장소로 저장하는 작업
커밋 한번,한번이 의미있는 히스토리(history) 이며, 커밋 로그로 설명을 남긴다.
커밋의 단위는 팀에서 정하며, 대부분 포멧도 정한다.
- 체크아웃(checkout)
커밋 단위로 남긴 히스토리 단위의 소스코드 버전으로 이동하거나, 브랜치의
소스코드로 이동하는 것.
- 태그(tag)
커밋의 위치를 알아보기쉽게 태그를 달아 놓는다.
태그를 달아놓은 커밋은 태그명으로 쉽게 체크아웃이 가능해진다.
- 푸시(push)
로컬 저장소에서의 변동(수정) 소스코드를 원격저장소에 반영시키는 것.
- 풀(pull)
푸시와 반대되는 작업으로서 원격저장소의 내용을 로컬저장소에 반영시키는 것