깃(Git)?
'깃은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템이다.'
리누스 토르발스가 개발한 깃이라는 소프트웨어에 대한 위키백과의 설명이다.
찬찬히 문장을 뜯어보자면,
우선 깃의 존재 목적은 컴퓨터 파일의 변경사항 추적과 사용자 간 작업 조율이다.
즉, 나의 작업을 기록하고 다른사람들과 함께 작업하기 위해 있는 것이다.
따라서 버전 관리 시스템이라는 정의 그대로 작업 상황을 버전으로 저장해 가며 개발할 수 있다.
※ 깃과 깃허브는 다르다. 깃은 위에서 설명했듯이 버전 관리 시스템이고 깃허브는 깃을 통해 저장한 내용들을 원격 저장소에 저장하고 호스팅 할 수 있게 해주는 웹 서비스이다.
Git 설치
Git 사이트에서 무료로 설치가 가능하다.
전부 설치를 마치면 Git Bash도 설치가 된다.
Git Bash는 Git 이용이 가능한 유닉스 쉘로 기본적으로 리눅스 커맨드 입력이 가능하고 Git 관련 명령어들도 사용할 수 있다.
커밋(commit)과 스냅샷(Snapshot)
앞서 본 Git에 대해 위키백과에 적혀있는 정의를 다시 보면
'깃은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템이다.'
'스냅샷 스트림 기반'이라는 말이 있다.
스냅샷 스트림이 무엇일까?
우선 '스냅샷(Snapshot)'이란 순간적인 장면을 촬영한 사진이다.
다시 말해 내가 작업을 한 그 순간을 기록한 것이다.
스트림(Stream)은 흐름을 의미한다.
결과적으로 스냅샷 스트림은 내가 작업한 그 순간들을 기록한 것의 흐름인 것이다.
※ 이때 내가 작업한 그 순간들을 기록하는 것을 commit이라고 한다. (즉, commit을 하면 새로운 스냅샷이 생성되는 것)
Git은 이 개념을 토대로 버전들을 저장하고 관리한다.
위 사진은 어떠한 작업물을 작업하는 과정에서 3번의 commit을 진행한 것이다.
회색 바탕의 상자가 commit 내용이고 각각의 commit 아래에는 스냅샷이 있는 모습이다.
스냅샷 순서는 A -> B -> C 순이다.
commit부분을 보면 위에 '98ca9'처럼 마치 식별 번호 같은 것들이 있다.
이는 각각의 스냅샷을 구분할 수 있게 해주는 SHA-1 값이며 Git은 이를 id로 사용한다.
※ SHA-1
미국 국가안보국이 만든 SHA-1은 160비트 해시값을 만들어내는 암호화 해시 함수이며, 보통은 16진수로 렌더링 된다.
입력 메시지가 아주 조금만 바뀌어도 해시값이 많이 바뀌기 때문에 유니크한 값이 만들어진다.
(해시는 입력 데이터를 고정된 길이의 데이터로 바꾼 값을 의미)
그러나 id값만으로는 스냅샷들간의 순서를 알 수 없다.
따라서 위 사진 속 commit의 'parent' 부분에 이전 스냅샷의 id를 저장하여 트리 형식으로 부모-자식 관계를 만드는 방식으로 순서를 만든다.
브랜치(Branch)?
브랜치(Branch)란 앞에서 본 커밋들 사이를 이동할 수 있는 포인터이다.
사용자는 이 브랜치를 이용해서 커밋을 선택함으로써 해당 커밋을 불러올 수 있다.
브랜치는 마치 마우스 커서와도 같다.
그동안 작업했던 히스토리에 따라 파일들(커밋)이 있고, 사용자는 커서로 원하는 시점의 파일을 열람하여 이용할 수 있는 것이다.
처음에 브랜치는 master(혹은 main)이라는 이름으로 생성된다.
이는 깃이 기본적으로 생성하는 브랜치이다.
이후에 브랜치를 더 만들 수도 있다.
마우스 커서를 추가한다고 생각하면 편하다.
물론 사용자는 한 번에 하나의 커서만 움직일 수 있고, 각 커서는 마지막에 있었던 자리를 지키고 있다.
브랜치가 여러 개라면 브랜치 사이를 이동할 수 있는 요소가 필요할 것이다.
이때 사용하는 것이 Head이다.
Head 또한 브랜치처럼 포인터이며, 커밋을 가리키는 브랜치랑 비슷하게 Head는 브랜치를 가리킨다.
즉, 앞서 말한 비유를 사용하자면 어떤 마우스 커서를 사용할지를 Head를 통해 선택하는 것이다.
위 사진을 통해 브랜치와 Head의 사용을 볼 수 있다.
master와 testing이라는 브랜치가 각자의 커밋을 가리키고 있으며, Head는 현재 testing을 가리키고 있다.
이 상태에서 브랜치를 다른 커밋으로 옮기면 testing브랜치가 옮겨가는 것이다.
Git 실제 사용
각 프로젝트(폴더) 별로 커밋들을 저장할 파일이 필요하다.
git init
위의 명령어를 통해 커밋들을 저장할 .git파일을 생성할 수 있다.
파일들을 수정한 후 commit을 진행하기 전 commit 할 파일을 Staging Area에 올려야 한다.
git add .
위의 명령어를 통해 수정한 파일들을 Staging Area에 올릴 수 있다.
'.'기호 대신 경로를 적어서 원하는 파일들을 선택하여 올릴 수도 있다.
※ Git의 3가지 Area
Working Directory: 내가 작업하고 있는 프로젝트의 디렉터리
Staging Area: 커밋을 위해 파일들이 모여있는 공간
Repository: 커밋들이 저장되어 있는 곳
※ Staging Area의 필요성
바로 Commit을 바로 진행하지 않고 Staging Area에 파일을 올린 후 진행하는 이유는 원하는 부분씩 파일들을 끊어서 Commit을 진행할 수 있기 때문이다. 즉, 여러 기능들을 구현하였을 때 해당 내용들을 하나의 commit으로 압축하지 않고, 기능별로 commit을 진행하여 버전 관리를 더 용이하게 할 수 있다.
파일들을 Staging Area에 올렸다면 Commit을 진행해야 한다.
git commit -m 'version 1.0.0'
위의 명령어를 통해 commit을 진행할 수 있다.
이때 -m 옵션으로 commit에 주석을 남길 수 있다.
git log
위의 명령어로 commit 내역을 볼 수 있으며
git log --oneline
--oneline을 통해 내역을 더 간결하게 볼 수 있다.
GitHub
Git을 통해 커밋을 저장하면 로컬 컴퓨터에 저장된다.
그러나 팀과 협업을 하거나 원격 저장소에 프로젝트를 저장하고 싶다면 GitHub를 사용해야 한다.
GitHub는 파일을 원격 저장소에 저장하고 호스팅 할 수 있게 해주는 웹 서비스이다.
git remote -v
위 명령어를 통해 현재 연결된 원격 저장소의 주소와 원격 브랜치 이름을 확인할 수 있다.
처음 프로젝트를 생성하여 아무것도 뜨지 않는다면 원격 저장소와 연결하는 작업이 필요하다.
git remote add origin <원격 저장소 URL>
위 명령어를 통해 연결 가능하다.
※ 명령어를 입력할 때마다 URL을 적기는 힘들다. 그래서 origin이라는 이름으로 URL을 저장한다.
물론 다른 이름으로 하여도 문제없다. origin을 사용하는 이유는 그저 사람들이 많이 사용하는 이름이기 때문이다.
※ 원격 저장소 URL은 Git Repository에서 확인할 수 있으며, 형식은 다음과 같다.
https://github.com/사용자명/Repository이름.git
원격 저장소에 커밋을 push 하면 원격 저장소에 내용이 저장된다.
git push origin main
위 명령어를 통해 push 가능하다.
자료 조사 출처
깃 (소프트웨어) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 깃저장소 생성, 파일 추가, 원격 동기화를 표시하는 터미널 창원저자리누스 토르발스[1]개발자주니오 하마노(Junio Hamano), 리누스 토르발스 등[2]발표일2005년 4월
ko.wikipedia.org
Git - 브랜치란 무엇인가
3.1 Git 브랜치 - 브랜치란 무엇인가 모든 버전 관리 시스템은 브랜치를 지원한다. 개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생긴다. 코드를 통째로 복사하고 나서 원래 코드와
git-scm.com
[Git] Git 3가지 영역 (Staging Area) - Commit 이해하기
Staging AreaCommit을 할 때, 총 3가지 영역을 바탕으로 작동합니다.Working Directory : 내가 작업하고 있는 프로젝트의 디렉토리Staging Area : 커밋을 하기 위해 $ git add 명령어로 추가한 파일들이 모여있는
iseunghan.tistory.com
[GIT] git commit이란?
안녕하세요? 코딩중독입니다. 저번 시간에는 git init, git status, git add를 알아 보았습니다. 이번 포스팅에서는 git commit에 대해서 설명하겠습니다. 이전 내용 Review 저번 포스팅에서는 gitProject 폴더
steady-coding.tistory.com
[Develop/Git] GitHub remote add 간단정리 (원격저장소 추가)
GitHub remote add 간단정리 (원격저장소 추가) GitHub Repository 원격 저장소에 초기 연결 방법에 대하여 간단하게 설명한다. remote add를 이용한 원격저장소 추가 1. 자신의 GItHub에 Repository를 생성한다. 2.
hoons-up.tistory.com
'GIT' 카테고리의 다른 글
[GIT] 깃(git)의 내부 데이터 구조: 블롭(blob), 트리(tree), 커밋(commit), 태그(tag) (0) | 2025.06.23 |
---|---|
[Git] 깃허브(GitHub) Private Repository 접근 방법2: Token (0) | 2025.03.26 |
[Git] 깃허브(GitHub) Private Repository 접근 방법1: SSH (0) | 2025.03.26 |