[개발지식] Git & Github

박창조·2024년 5월 8일

개발지식

목록 보기
5/5
post-thumbnail

Git을 사용하기 전...발생한 문제

1. 변경 내역을 확인하기 어렵다.

프로그래밍을 하다보면 작성한 코드들의 버전을 관리해야 하는 상황이 많이 생긴다.

어제 작성한 코드와 오늘 작성한 코드의 그저 저장된 상태로는 변경 내역을 추적하기가 어렵다.

매번 다른 이름으로 파일을 저장하며 관리 할 수 도 있겠지만, 이 방법은 저장공간을 낭비할 수 있다.

“프로그램최종 파일”
“프로그램
찐 최종 파일”

“프로그램_찐찐 최종 파일”
“프로그램_진짜 찐찐찐 최종 파일”

2. 버전을 되돌리기 어렵다.

파일을 단순히 덮어쓰거나, 다른 이름으로 저장하는 방식으로는 과거 특정한 시점으로 파일을 되돌리기 어렵다.

페이지에서 어떤 하나의 디자인을 다시 과거로 돌리려 할 때가 있다면, 그 시점이 언제인지 명확하게 알기 힘들뿐더러 다른 코드와 함께 수정 되어 있다면, 즉시 해당 버전으로 되돌리기가 매우 어렵게 된다.

3. 다른 개발자와 협업하기 어렵다.

대규모 프로젝트는 대부분 여러 개발자가 함께 협업하여 개발을 한다. 각각의 기능을 분담하여 개발을 하고, 나중에 각각의 내용들을 모아 하나의 파일로 합치는 과정이 매우 어렵다.

작성한 코드의 양이 방대하고, 누가 어떤 파일에서 어떻게 코드를 수정했는지 파악하기 힘들기 때문이다.

서로의 코드를 일일이 비교하며 개발해야 한다면 많은 부분에서 효율성이 떨어지게 된다.

“Git”은 이러한 문제들을 해결해주는 방안으로 등장하게 되었다.


Git이란 ❓

“버전 관리를 도와주는 SW, 버전 관리 시스템(Version Control System)

리눅스의 아버지라고 불리는 Linus Torvalds 가 전 세계 수많은 개발자와 함께 오픈 소스 프로젝트를 진행하다 버전 관리에 어려움을 느껴 만든 도구이다.

버전 관리 시스템인 Git은 여러 개발자가 동시에 작업할 때 코드 충돌을 방지하고 작업 내역을 체계적으로 관리하는 데 도움을 준다.

분산 버전 관리, 가볍고 빠른 브랜치 관리, 그리고 다양한 협업 플랫폼과의 통합으로 인해 현대 소프트웨어 개발에서 널리 사용되고 있다.

많은 버전 관리 프로그램 중에 왜 Git 일까?

  • 현재 전 세계에서 가장 많이 사용되고 있기 때문
  • 오픈소스로 공개되어 있어 무료로 사용 가능
  • 변경된 내용만 snapshot 을 통해 버전을 관리하기 때문에 가볍고, 빠름
  • 오프라인에서도 사용가능
  • 버전을 과거로 되돌리기에 매우 쉬움
  • 각각의 기능별로 따로 관리 할 수 있고, 협업하기에 아주 용이함

Git의 컨셉

Git을 잘 사용하기 위해서는 중요한 컨셉을 잘 알아둘 필요가 있다. 사용하는 입장에서 Git을 바라볼 때, 어떤 흐름으로 파일이 관리가 되는지 알아보자.

Git의 3가지 영역

Git에는 크게 3가지의 영역으로 나눠져 있다.

Working directory

  • “프로젝트의 파일을 작성하고, 수정하는 작업 공간”

Staging area

  • “버전 히스토리에 저장할 준비가 되어 있는 파일” 을 옮겨 놓는 공간
  • 버전을 등록하는 Repository 에 저장할 파일이 잠시 머무르는 공간
  • *Working directory 에서 add 명령어를 통해 파일 임시로 옮겨 놓는다.*

.git Repository

  • “저장한 버전의 히스토리”를 가지고 있는 공간
  • *Staging area 에서 commit 명령어를 통해 파일을 저장한다.*

Git은 위 3가지 영역을 그림과 같이 파일이 순서대로 영역을 옮겨가며 수정된 내역을 하나의 버전으로 저장되도록 관리할 수 있다.


Git이 File을 바라보는 관점에서

Git이 아무 파일이나 수정된 내역을 추적(tracking)하지 않는다.

또한 Git이 변경사항을 추적(Tracking)하기는 하지만, 당장 버전에 등록할지를 말지를 지정해 둘 수 있는 상태들이 있다.

Git이 File을 바라보는 관점에서 상태가 다음과 같이 나눠진다.

Tracked & Untracked : Git이 추적 하고있는지 여부

  • *Working directory 에 존재*
  • *Git이 수정된 내용을 추적하지 않는 상태 → Untacked*
  • *Git이 수정된 내용을 추적하는 상태 → Tracked*
    • Modified → 최종 Repository의 상태와 비교하여 수정된 상태
    • Unmodified → 최종 Repository와 같은 상태

Unstaged & staged : Staging Area에 있는지 여부

  • Git*Tracking 하고 있음*
  • *Staging Area*에는 올라가있지 않는 상태 → Unstaged
  • *Staging Area*에는 올라가있는 상태 → staged

Github

지금까지 알아본 Git은 기본적으로 개인 Local 환경에서 동작하는 소프트웨어이다.

Local에서 저장해 놓은 Git 히스토리에 문제가 발생하게 되면, 지금까지 저장한 내용들을 쉽게 잃어 버리게 될 수 있다.

또한 다른 개발자들과의 협업을 위해서라면 서로 공유할 수 있는 하나의 저장소가 필요한데, 이것을 Remote 환경 즉,하나의 서버에 저장할 수 있도록 제공하는 서비스가 바로 Github이다.

Local에서 Remote에 등록할 때는 기본적으로 Github의 원격 Repository와 연결해 줘야 한다. 연결이 된 상태에서 push 라는 명령어를 사용하여 원격 Repository에 Git 히스토리를 등록할 수 있다.

반대로, 원격 Repository(Github)에서 Local에 가져와 사용하고 싶을 때는 pull 이나 fetch 명령어를 통해 불러올 수 있다.

Git에 대한 상세한 기능에 대해서는 다음 포스트를 통해 알아보자


참고

Git의 Staging Area는 어떤 점이 유용한가

[Git] Git 3가지 영역 (Staging Area) - Commit 이해하기

profile
사랑을 꿈꾸는 냄새나는 개발자 입니다 :)

2개의 댓글

comment-user-thumbnail
2024년 6월 27일

답글 달기
comment-user-thumbnail
2024년 6월 27일

답글 달기