티스토리 뷰

개발/git

Git 이란? (1) - Git 기초

애쿠 2023. 1. 28. 21:41

전부터 정리하고 싶었던, git에 대한 정리 글이다.

 

먼저 git에 정리해보고, 명령어, 내가 궁금했던 몇 가지에 대해 추가적으로 정리해보려고 한다.

본 포스팅은 https://git-scm.com/book 을 나름대로 요약 정리한 내용이다. 내용이 많아 Git Branch까지만 정리할 예정이다.


Git이란?

일반적으로 사용되는 오픈 소스 분산 버전 제어 시스템(Distributed Version Control System)이다. 코드의 변경 사항을 추적하고, 변경 사항을 병합하는 기능을 제공하여 여러 사람이 프로젝트에서 공동 작업을 수행할 수 있도록 했다.


1. 버전 관리 시스템(Version Control System)

버전 관리 시스템(Version Control System 이하 VCS)은 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 버전 관리 시스템은 목적과 용도에 따라 꾸준히 변화해 왔다.


버전 관리 시스템은 로컬 버전 관리(LVCS) -> 중앙 집중식 버전 관리(CVCS) -> 분산 버전 관리 시스템 형태(DVCS)로 발전해 왔고, 발전하면서 이전 버전 관리 시스템들의 단점을 보완해왔다.

 

그렇지만 LVCS, CVCS도 여전히 쓰이고 있다. 대표적으로, Subversion이 중앙 집중식 버전 관리 시스(CVCS)템이다.

 

Git은 분산 버전 관리 시스템(DVCS) 방식을 취하고 있다. CVCS는 중앙에 서버를 두고 파일을 받아 작업을 하기 때문에, 서버에 문제가 생길 경우 로컬에서의 작업에도 제약이 생길 수 있고 서버의 데이터를 영원히 잃어버릴 수도 있기 때문이다.

 

DVCS 방식은, 체크아웃 시 마지막 버전의 파일만 가져오는 것이 아니라 그 저장소와 히스토리를 전부 복제한다.

 

따라서 서버에 문제가 생겨도 로컬 저장소에 작업 내용이 남아있기 때문에 비교적 제약 없이 작업을 지속할 수 있으며, 클라이언트의 저장소를 이용해 서버의 잃어버린 데이터들을 복구할 수 있다는 장점이 있다.


2. Git 기초

2.1 스냅샷 기반 버전 관리 시스템

버전 관리 시스템은 델타 기반 버전 관리와 스냅샷 기반 버전 관리가 있다.

델타 기반의 버전 관리는 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다.

 

Git은 이와는 다르게 동작하는데, 각 파일에 대한 변화를 저장하게끔 만들어졌다. 때문에, 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.

 

파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다. 단, 이전 상태의 파일에 대한 링크만 저장한다.

 

2.2. 거의 모든 명령을 로컬에서 실행

거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크에 있는 다른 PC는 필요 없다.

 

즉 오프라인 상태이거나 VPN에 연결하지 못해도 막힘 없이 일 할 수 있다. 비행기나 기차 등에서 작업하고 네트워크에 접속하고 있지 않아도 커밋할 수 있다.(로컬 저장소라는 점이 기억나는지).

 

2.3. Git의 무결성

Git은 스냅샷 저장 시 파일의 내용이나 디렉토리 구조 등을 SHA-1을 이용해 체크섬을 구해 부여하는 방식으로 버전을 관리한다.

 

Git은 모든 것을 해시로 식별하기 때문에 이런 값은 여기저기서 보인다. 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.

 

2.5. Git은 데이터를 추가할 뿐

Git으로 무얼 하든 Git 데이터베이스에 데이터가 추가된다.

 

되돌리거나 데이터를 삭제할 방법이 없다. 다른 VCS처럼 Git도 커밋하지 않으면 변경사항을 잃어버릴 수 있다. 하지만, 일단 스냅샷을 커밋하고 나면 데이터를 잃어버리기 어렵다.

 

2.6. Git의 세가지 상태

Git 프로젝트는 Repository, Staging Area, Working Directory라는 세 가지 단계로 이루어진다.

 

  1. Repository
    프로젝트 내의 .git 디렉토리이며 Git 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 공간이다. 이 디렉토리는 프로젝트를 init하거나 clone 시 생성된다.
  2. Working Directory
    Working Tree라고도 불리며 실제 작업을 하는 공간이다. Repository의 특정 버전을 Checkout 하여 생성한다.
  3. Staging Area
    주로 Index 불리며, 커밋할 파일에 대한 정보를 저장하는 공간으로 .git/Index라는 단순한 파일로 존재한다.

이 세 단계에서 프로젝트 파일을 세 가지 상태로 관리하게 된다.

 

  1. modifed : 파일을 수정한 상태로, 아직 로컬 데이터베이스에 있지만 커밋되지 않은 상태를 말한다.
  2. staged : 수정된 파일을 커밋하기 위해 Index에 추가된 상태를 말한다.
  3. committed : Index의 내용이 로컬 데이터베이스에 안전하게 저장된 상태를 말한다.

 

정리하면, Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified, 파일을 수정하고 Staging Area에 추가했다면 Staged이다. 마지막으로, 커밋을 수행해 Git 디렉토리에 있는 파일들은 Committed 상태이다.

3. 시작하기

Git을 사용하는 방법은 많다. CLI로 사용할 수도 있고 GUI를 사용할 수도 있다. 다만, Git의 모든 기능을 지원하는 것은 CLI 뿐이다. CLI를 사용할 줄 알면 GUI도 사용할 수 있지만 반대는 성립하지 않는다.

 

GUI를 사용하고 싶더라도 CLI가 기본으로 설치되는 도구이기 때문에 CLI기준으로 설명하겠다.

3.1. install

1. Windows 설치

http://git-scm.com/download/win

2. Linux 설치(Ubuntu)

sudo apt install git-all

Mac OS나, 다른 Linux 배포판에서는 설치법이 다르니 찾아서 해보길 바란다.

3.2 git config

git config라는 도구로 설정 내용을 확인하고 변경할 수 있다. Git은 이 설정에 따라 동작한다. 이때 사용하는 설정 파일은 세 가지나 된다.

 

  1. /etc/gitconfig : 파일 시스템의 모든 사용자와 모든 저장소에 적용되는 설정이다. git config --system 옵션으로 이 파일을 읽고 쓸 수 있다. (시스템의 관리자 권한 필요)
  2. ~/.gitconfig, ~/.config/git/config : 특정 사용자(즉 현재 사용자)에게만 적용되는 설정이다. git config --global 옵션으로 이 파일을 읽고 쓸 수 있다. 특정 사용자의 모든 저장소 설정에 적용된다.
  3. .git/config : 이 파일은 Git 디렉토리에 있고 특정 저장소(혹은 현재 작업 중인 프로젝트)에만 적용된다. --local 옵션을 사용하면 이 파일을 사용하도록 지정할 수 있다. 하지만 기본적으로 이 옵션이 적용되어 있다.

각 설정은 역순으로 우선시 된다. 그래서 .git/config 가 /etc/gitconfig 보다 우선한다.

 

git config --list 명령을 실행하면 설정한 모든 것을 보여주어 바로 확인할 수 있다.

 

Git을 설치하고 가장 먼저 해야하는 것은 사용자 이름과 이메일 주소를 설정하는 것이다.

한번 커밋 한 이후에는 정보를 변경할 수 없다.

# 사용자 정보 설정
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"

마치며

여기까지 Git이 무엇이고 지금까지 사용해 온 다른 CVCS와 어떻게 다른지 알아봤다. 더불어 Git을 설치하고 사용자 정보도 설정했다. 다음 장에서는 Git의 사용법을 명령어에 따라 정리해보겠다.

'개발 > git' 카테고리의 다른 글

GIT LFS(Large File Storage)란?  (0) 2023.02.20
Git이란? (4) - branch란?  (0) 2023.02.19
Git이란? (3) - gitignore / git reset 제대로 알고가기  (0) 2023.02.17
Git 이란? (2) - Git 명령어  (0) 2023.01.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함