이번 포스팅에서는 깃(Git) 기본 개념에 대하여 공부를 해보고자 한다.
깃(Git)
Git이란 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템을 말한다.
소프트웨어를 개발하는 기업의 핵심 자산인 소스코드를 효과적으로 관리할 수 있게 해주는 무료, 공개 소프트웨어다.
서버에 문제가 생겨도 복제한 clone을 통해 복구가 가능하다는 특징이 있다.
소스코드를 주고받을 필요 없이, 동일한 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다.
즉, 브랜치를 통해 개발한 뒤, 본 프로그램에 합치는 방식(Merge)으로 개발을 진행할 수 있다.
이로 인해 팀 프로젝트가 아닌, 개인 프로젝트일지라도 GIT을 통해 버전 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해진다. (pull을 통한 업데이트, patch 파일 배포)
개발을 시작하는 폴더에서 아래와 같이 git 초기화 명령어로 시작하면 모든 수정 내용이 저장되는 .git 폴더가 생성된다.
거의 모든 개발 환경에는 모든 주요 운영 체제에서 구현된 Git 지원 및 Git 명령줄 도구가 있다.
버전 관리란?
버전 관리 시스템(VCS - Version Control System)은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.
VCS를 사용하면 각 파일을 이전 상태로 되돌릴 수 있고, 프로젝트를 통째로 이전 상태로 되돌릴 수 있고, 시간에 따라 수정 내용을 비교해 볼 수 있다.
또한, 누가 문제를 일으켰는지도 추적할 수 있고, 누가 언제 만들어낸 이슈 인지도 알 수 있다.
파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.
분산 버전 관리 시스템 (Distributed Version Control System)
파일의 변경정보 히스토리와 저장소를 여러 클라이언트에 복제하여 관리한다.
원격 중앙 서버가 있는 게 아니고 로컬도 중앙이 될 수 있다.
Git, mercurial, darcs 등이 이 방식이다.
어딘가에 clone(복제)해둔 코드가 있다면 코드의 복구가 쉽다.
로컬에서 반영한 내용이 잘못되었다도 하더라도 복구가 쉽고, 다른 사람의 코드와 충돌이 날 가능성이 적다.
클라이언트가 서버에서 마지막 스냅샷을 받아오는 게 아니고, 저장소의 모든 것(히스토리 포함)을 복제한다.
빠르고 가볍고 단순하고 여러 작업자가 작업해도 문제가 없다.
DVCS 환경에서는 리모트 저장소가 존재하며, 리모트 저장소가 많을 수도 있다.
그래서 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다.
계층 모델 같은 중앙집중식 시스템으로는 할 수 없는 워크플로를 다양하게 사용할 수 있다.
Git의 기본 개념
파일의 차이(delta)를 관리하는 게 아니고 스냅샷(snapshot)을 관리한다.
이전 버전과의 차이(델타)만 저장하는 것이 아니라, 모든 파일의 현재 상태를 스냅샷으로 관리한다.
Hash(체크섬)으로 데이터를 관리
Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.
SHA-1 해시로 체크섬을 만들고, 이 해시는 git안에서 식별자로 사용된다.
예 ) 24b9da6552252987aa493b52f8696cd6d3b00373
Git 구조
Working Directory
개발자들이 현재 작업하고 있는 물리적인 소스가 저장된 영역
저장 작업을 하면 이전 버전은 사라진다.
Git을 적용하면 Staging Area와 Local Git Repository 영역이 생긴다.
Staging Area
Working Directory에서 작업을 진행하다 commit을 할 만큼 완성되지 않았을 때, 중간 작업분을 저장해두는 영역
Local Repository
내 PC에 파일이 저장되는 개인 전용 저장소
내 PC에서 작업하던 내용을 원격 저장소로 업로드를 할 수 있고 반대로 다른 사람의 원격 저장소에 있는 파일을 불러 올 수도 있다.
Remote Git Repository
파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소(원격 저장소)
협업 개발을 할 때 이 저장소를 통해 서로 소스를 교환한다.
Git의 영역에 대한 부분은 따로 공부해서 정리해볼 생각이다.
도움받은 글들
'Git & GitHub' 카테고리의 다른 글
[Git] 깃(Git) 협업을 위한 명령어(2) (6) | 2022.11.07 |
---|---|
[Git] 깃(Git) 협업을 위한 명령어(1) (2) | 2022.11.06 |
[Git] 깃(Git) 기본 명령어 (0) | 2022.11.05 |
[Git] 깃(Git) 기본 설정 (0) | 2022.11.04 |
[Git] 깃(Git)의 영역 (0) | 2022.11.03 |