본문 바로가기
Git

[Git] Git 구조와 용어

by 도전하는 린치핀 2024. 1. 17.

1. Git과 Github는 무엇일까?

Git은 SVN 이후로 가장 많이 사용되는 형상관리 툴이다. 기본적인 개발자가 되기 위해서는 꼭 깃을 써보고 잘 다룰 수 있어야 한다는 밈이 있을 정도로 개발자들에게 Git이란 빼놓을 수 없는 존재다.

 

이러한 깃은 컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떤 파일이든 변경사항을 지속적으로 추적하기 위해 사용한다.

 

Git을 활용하여 로컬에서 자신의 개발 소스에 대한 섬세한 관리가 가능하고, Remote Repository(원격 저장소)에 영구적인 백업과 다양한 협업이 가능하도록 지원하는 기능을 가리킨다.

 

그렇다면 Git과 Github의 차이는 무엇일까?

  • Local RepositoryRemote Repository 차이
  • Git (Local Repository) : 로컬 코드 관리
    • 다양한 버전 : 로컬에서 작업한 내용을 적용
    • 히스토리 추적 : 이전 적용내용(수정사항) 확인
    • 안전한 원격 저장 : 로컬 작업 내용들 모두 원격으로 백업
  • Github (Remote Repository) :협업 관리
    • 동료 개발자들과 수정한 작업물을 그대로 이어 받아 작업 가능

 

2. Git의 구조

기본적으로 Git의 구조는 Remote Repository와 Local Repository로 나뉜다.

자세한 구조는 아래와 같다.

  • Remote Repository
  • Local Repository
    • Working Directory
      • Tracked
        1. Staging Area, Index : Commit 되기 위해 대기중인 파일들(Git Commit 명령어 시 여기에 있는 파일들이 스냅샷 찍힘)
        2. Unstaged : (Git이 추적하는 파일 중) 수정된 파일들의 집합 (이 중에서 Commit 하고자 하는 것들을 Staging Area로 올린다.)
      • Untracked : Git이 추적하지 않는 파일들의 집합

아래의 그림을 통해 간단하게 구분해보자

출처 : UX 공작소

 

3. 기본적인 Git 용어

용어 내용
Repository 파일이나 디렉토리를 저장하는 저장소
Local repository : 개인 PC에 존재하는 저장소
Remote repository : 원격 저장소로 파일을 원격 저장소 전용 서버에서 관리하고 공유 가능
git clone remote repository의 내용을 그대로 local 에 다운로드한다. 
git clone repository address
git add


git add는 작업 디렉토리의 변경 내용을 스테이징 영역에 추가하기 위해 사용하는 Git 명령어
git add 명령어는 다음 변경(commit)을 기록할 때 까지 변경된 부분들을 모아놓기 위해 사용

따라서, git commit 명령어를 통해 명시적으로 기록(commit)을 남기기 전까지 git add 명령어를 많이 실행해도 Git저장소의 변경은 없다. 
git add <파일/디렉토리 경로>

- 작업 디렉토리의 변경 내용의 일부만 스테이징 영역에 넘기고 싶을 때는 수정한 파일이나 디렉토리의 경로를 인자로 넘긴다.
git add .

작업 디렉토리의 변경 내용을 .gitignore 파일에 있는 파일명들은 제외하고 스테이징 영역으로 넘기고 싶을 때는 .을 인자로 넘긴다.
git add *

- 작업 디렉토리 내의 모든 변경 내용(.gitignore 파일 포함) 모두 스테이징 영역으로 넘기고 싶을 때는 *옵션을 사용한다. 

- .gitignore를 사용한다면 git add .을 사용하는 것이 좋다.
git status git add 명령어를 사용할 때, 보통 같이 사용되는 명령어

- git status 명령어는 작업 디렉토리와 스테이징 영역의 상태를 확인하기 위해 사용한다.

(1) Changes to be committed : 스테이징 영역에 넘어가 있는 변경 내용을 보여준다.

(2) Changes not staged commit : 아직 워킹 디렉토리에 있는 변경 내용만 보여준다.

(3) Untracked files : 워킹 디렉토리에 있는 파일 중 Git 저장소가 관리한 적 없는 새로운 파일
git commit

스테이징 영역의 파일 및 폴더의 추가/변경 사항들을 저장할 때 사용한다.
git commit - m "커밋 내용"
git push commit 한 내용(head의 변경 내용)을 remote repository(원격 저장소)에 올린다.

즉, local에서 변경한 내용을 remote repository로 업로드하는 것이다.
git push <branch name>
git merge branch의 변경 사항이 다른 branch의 반영할 때 사용한다.
현재 branch를 기준으로 병합된다.

만약 두 branch가 같은 파일의 같은 곳을 수정하면 Conflict(충돌)이 발생한다.
git merge <합칠 branch name>
git checkout 작업을 진행할 브랜치를 변경한다. 만약 해당 브랜치가 없을 경우 생성한 뒤 이동한다.
git checkout -b <이동(생성)할 branch>

 

따라서 그림으로 정리해보면 아래와 같을 수 있다.