Git이란 분산형 버전 관리 시스템 (Version Control System)의 한 종류이다.
Git으로 관리하는 프로젝트를 올려둘 수 있는 사이트가 Github와 GitLab이다.
버전관리 시스템은 파일변화를 시간에 따라 기록했다가 나중에 특정시점의 버전을 다시 꺼내올 수 있는 시스템이다.
☑️ 각 파일을 이전 상태로 되돌릴 수 있다.
☑️ 프로젝트를 통째로 이전 상태로 되돌릴 수 있다.
☑️ 시간에 따라 수정 내용을 비교해 볼 수 있다.
☑️ 누가 문제를 일으켰는지도 추적할 수 있다.
☑️ 누가 언제 만들어낸 이슈인지도 알 수 있다.
☑️ 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.
- 팀원이 같은 웹사이트에서 동시에 같은 'A'페이지를 업데이트 하고 있다.
- 나는 무언가를 변경하고 저장한 다음 웹사이트에 'A'페이지를 업로드한다.
- 그런데 이때 동료가 동시에 'A'페이지에서 작업을 할 때 문제가 발생된다.
- 만약 확인하지 않고 동시에 작업을 한다면 누군가의 작업은 겹처 쓰여질 것이고 지워질 것이기 때문이다.
- Git은 이와 같은 일을 사전에 방지해준다.
- 나와 동료는 같은 페이지에 각자 수정사항을 업로드 할 수 있고, 두개의 복사본을 저장한다.
팀원 모두가 같은 환경에서 개발하여 불필요한 시간을 없애고 서로 주고 받는 와중에 일어나는 충돌을 최소화 하기 위해
프레임워크를 갖추고 공통으로 쓰는 코드들을 미리 넣어두고, 테스트 코드나 샘플 코드들을 넣어주어서 프로젝트 개발을 시작하기 전에 팀원 모두에게 같은 코드로 테스트 할 수 있는 환경도 제공할 수 있다.
소스 코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다. (Merge 방식)
분산 버전 관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있고, 중앙 저장소가 날라가 버려도 원상복구할 수 있다.
팀 프로젝트가 아닌, 개인 프로젝트일지라도 Git을 통해 버전 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해진다.

| 용어 | 설명 |
|---|---|
| Repository (저장소) | 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳 소스코드들이 저장되어 있는 물리적인 공간을 의미 로컬 저장소(Local Repository)와 원격 저장소(Remote Repository)가 있음 |
| Working Tree | 현재 파일 수정, 저장 등의 작업을 하는 디렉터리를 의미 |
| Index (= Staging Area) | Commit을 실행하기 전의 저장소와 Working Tree 사이에 존재하는 공간 저장소에 커밋하기 전에 준비하는 위치 |
| Head | 현재 작업 중인 브랜치를 의미 |
| Snapshot | 특정 시점에서 파일, 폴더 또는 워크스페이스의 상태를 의미 |
| Commit | 변경된 작업 과정들을 점검하고 저장소에 저장하는 작업 |
| Checkout | 특정 시점이나 Branch의 소스 코드로 이동하는 작업 이전 버전 작업을 불러오는 데 주로 사용 |
| Branch | Commit 단위로 구분된 소스 코드 타임라인에서 분기점을 의미 Branch에서 작업을 완료하면 Merge 작업 수행 가능 |
| Merge | Branch와 Branch의 내용을 합치는 작업, 즉 병합 |
로컬 저장소
원격 저장소
| 항목 | 로컬 저장소 | 원격 저장소 |
|---|---|---|
| 저장 위치 | 개발자의 컴퓨터에 있으며, 프로젝트 디렉토리 내에 위치 | 네트워크 상의 다른 위치 (예: GitHub 서버)에 위치 |
| 저장 목적 | 개발자가 코드를 수정하고 변경 이력을 관리하기 위해 사용 | 여러 개발자가 협업하고 코드를 공유하며, 백업 및 배포를 위해 사용 |
| 저장 내용 | 작업 디렉토리와 Git 이력을 포함 | 로컬 저장소의 특정 시점을 포함하며, 코드 공유 및 협업을 지원 |
작업을 하는 프로젝트 디렉토리를 의미한다.
git add를 한 파일들이 존재하는 영역이다.
커밋을 하게 되면 staging area에 있는 파일들만 커밋된다.
working directory의 변경 이력들이 저장되어 있는 영역이다.
커밋들이 저장되는 영역이라는 뜻으로, working directory에서 특정 작업을 진행하고, 해당 파일을 git add해주고 커밋하면 staging area에 있던 파일들의 변경사항이 해당 repository에 저장된다.
Git 저장소 서버를 대신 유지 및 관리해주는 서비스이다.
다른 유저들과 함께 온라인으로 하나의 프로그램을 제작하는것도 가능하며 많은 오픈소스 프로그램들이 Github를 통해서 전 세계 개발자들에 의해 제작되고 있다. 주로 개인은 GitHub, 회사는 GitLab를 사용하는 편이다.
깃허브는 세계최대 규모의 Git 저장소로 무료 서버저장소를 지원하기 때문에, 초급~고급 개발자 모두 이용하며, 수많은 개인 개발자들, 팀개발자들이 이용하는 서비스이다.
깃허브는 무료로 이용하는대신 자신의 소스코드가 오픈되어 수많은 사람들이 보며 활용 가능하고, 익명의 개발자와 함께 작업할수있도록 하여 프로그래밍을 더욱 확산시켜주는 환경으로 자리하고있다.
반면 GitLab(깃랩)은 수많은 기업에서 보안성을 중시하는 프로그램 코드를 올려 함께 협업하는 툴로 애용하므로, 사용자가 기업들이 되며, 자신의 서버에 설치하여 서버내 프라이빗한 Git 원격 저장소를 만들수있는 서비스이다.