[Git] Git 개념 정리

GilLog·2021년 4월 23일
0

형상관리

목록 보기
3/8

🙆‍♂️ import 🙇‍♂️

Git에 대해 알아보자 1. Git의 개념과 Git Flow[오지는 컴퓨터 공부-사용자 쌍문동믹서기]


Git

Git의 정의는 분산 버전 관리 시스템을 뜻한다.

Git 사용 목적

Git이나 SVN과 같은 분산 버전 관리 시스템을 사용하는 목적아래와 같은 상황 때문이다.


상황 : 팀 프로젝트 수행을 위해 Gil, Log, Load, Bear 4명의 개발자가 모였다.
이 네 명은 원활한 프로젝트를 위해 구현할 기능 개발을 나누었다.
Gil, Log기능 1을, Load기능 2, Bear기능 3을 개발하기로 정했다.

이 네 명의 개발자가 Git과 같은 분산 버전 관리 시스템을 사용하지 않을 경우 아래와 같은 문제가 발생할 수 있다.

  1. Gil은 이미 코드를 다 구현했지만 Log로부터 완성된 코드를 공유받지 못해 다음 단계로 진행할 수가 없다.
  2. Log가 코드를 완성했지만 Gil의 코드와 충돌이 발생했다. 결국 서로의 코드를 이해하기 위해 GilLog의 코드를 읽고, LogGil의 코드를 읽어야 한다. 이 과정에서 코드를 완성한 LoadBear는 추가적인 충돌을 방지하기 위해 Gil, Log를 기다린다.
  3. 오류를 모두 고치고 Gil, Log, Load, Bear는 현재까지 코드를 다같이 총 2번 합쳤다. 2번째까지는 아무 문제가 없었다. 그러다 3번 째 코드를 합치는 과정에서 오류가 발생한 경우 문제가 어디서 발생했는지 알아보기 위해 2번째 합친 코드로 돌아가보기로 하는데, 아무도 이전 코드를 가지고 있지 않았다.
  4. 이제 전체 코드를 이해하기 위해 엄청난 시간을 들여서 각자가 짠 전체 코드를 모두가 이해하며 봐야 한다. Load는 기능 1을 살펴보다 궁금증이 생겨 Gil에게 질문을 한다. 하지만 해당 파트는 Gil이 짠 게 맞지만, Log가 코드를 합치는 과정에서 호환성을 위해 Gil의 코드를 일부 수정했다. Log도 마찬가지로 자기가 짠 코드지만 여러 수정 과정을 거치다 보니 내가 짠 코드가 무엇인지 헷갈리게 된다.
    Git에 대해 알아보자 1. Git의 개념과 Git Flow[오지는 컴퓨터 공부-사용자 쌍문동믹서기]

Git 개념

Repository

Repository는 말 그대로 파일 등이 저장되는 저장소로, 즉 프로젝트 폴더를 말한다.

저장소의 종류는 다음과 같다.

Remote Repository (원격 저장소): 원격 서버에 저장된 저장소로, 여러 사람이 함께 공유한다.

Local Repository (개인 저장소): 우리가 직접 관리하는 저장소로, 내 PC에 저장되어 있다.

Commit

Commit은 프로젝트의 변경 이력을 말한다.

Stage

Stage에 대해 설명하기 전 Index에 대한 개념을 이해해야 한다.

IndexCommit을 통해 변경사항들이 반영되기 전 해당 변경사항의 이력들이 저장되는 공간이다.

따라서 우리가 특정 파일이나 코드를 변경 시 해당 이력은 Index에 기록된다.

이때 이 기록되는 행위를 Stage 또는 Staging이라 한다.

따라서 다음과 같이 5개의 변경사항이 있을 시, 그 중에서 원하는 변경 사항만 stage하고 원하지 않는 변경 사항은 unstage한 뒤 commit을 진행하면 된다.

Branch

Branch는 특정 커밋으로부터 분기되는 포인터를 말하는 것으로, 여러 명이 같은 코드를 공유하며 협업하는 상황에서 각 개발자들이 개발을 진행하고 있는 환경 또는 흐름을 말한다.

각 개발자들은 여러 Commit을 만들며 프로젝트를 개발하는데, 이때 누가 어떤 Commit을 추가했는지 구분이 가능해야 한다.

이때 사용되는 것이 바로 Branch이다.

새로운 Branch가 생성되더라도 기존의 메인 Branch는 그대로 남아있다.

위와 같이 한 사용자가 자신의 기능의 세부 Branch를 또 다시 나눌 수도 있다.
Branch 생성 가능 갯수에는 제한이 없다

Checkout

Checkout은 현재 위치한 Commit에서 다른 Commit으로 이동하는 것을 말한다.

Checkout을 통해 현재 Commit에서 같은 Branch 내 다른 Commit으로 이동하거나, 다른 BranchCommit으로 이동할 수 있다.

Checkout으로 인해 이전 시점의 버전으로 되돌아갈 수도 있고, 다른 사람의 Branch로 전환해 다른 개발자들의 코드 진행 상황을 확인해 볼 수도 있다.

Merge

Merge는 나뉘어진 Branch를 다시 하나의 Branch로 합치는 것을 말한다.
가장 오류가 많이 발생하는 과정이니 주의

Merge 진행 시 현재 BranchBranch가 합쳐지는 기존 메인 Branch로 전환한 후 수정된 Branch를 Merge해야 오류가 발생하지 않는다.

여러 개의 Branch들을 한꺼번에 Merge할 때도 마찬가지로 차례차례 기존 Branch 상태에서 Merge를 진행한다.

또한 Merge에는 종류가 2가지가 있다. 하나는 fast-forward이고, 나머지 하나는 non fast-forward이다.

fast-forward는 기본 merge 방식으로, 서로 다른 두 Branch를 충돌 없이 자동 merge 시키는 병합이다.

하지만 그 과정에서 때때로 일부 문법으로 인해 충돌 (Conflict)이 발생하면 병합에 실패하는 경우가 발생한다.

이때 해당 충돌 기록을 살피며 일일히 해당 코드를 수정한 뒤 Merge를 이어서 진행하면 성공적으로 Branch가 병합된다.

이러한 Merge 방식이 non fast-forward이다.

또한 이 과정에서 코드의 수정이 이루어졌으니 마찬가지로 새로운 Commit이 생성된다.

Clone

Clone은 원격 저장소로부터 특정 프로젝트를 통째로 내 로컬 저장소에 다운받는 것을 말한다.

Push

Push는 현재 내 로컬에서 작업한 변경 사항들을 원격 저장소에 반영하는 것을 말한다.

작업이 완료될 때마다 원격 저장소에 Push해야 다른 사람들이 내 코드를 확인할 수 있다.

Pull

Pull은 원격 저장소에서 변경된 사항들을 내 로컬 저장소에 반영하는 것을 말한다.

Push와 정반대의 개념으로, 다른 사람이 Push를 해서 원격 저장소에 코드를 업데이트하면 우리는 해당 코드를 Pull하여 로컬의 코드를 업데이트한다.

이때 기존의 코드와 내 코드가 다른 경우 Merge를 진행해 코드를 병합하게 된다.

Clone과 개념이 헷갈릴 수도 있는데, Clone은 프로젝트를 처음 불러올 때 프로젝트 전체를 다운받는 것이지만, Pull은 해당 프로젝트에서 변경된 사항들만 다운받는 것이다.

Git Flow

Git Flow란 저장소를 보다 고수준으로 관리하기 위한 브랜칭 기법이다.

프로젝트의 규모가 점점 커지면, 많은 인원들이 코드에 동시에 접근하면서 필연적으로 문제가 발생하게 된다.

따라서 현재 내 브랜치가 어떤 문맥에서 생겨나게 됐는지 파악하기 위해 Git Flow에 대한 이해는 반드시 필요하다.

Git Flow는 기본적으로 브랜치를 feature - develop - release - hotfix - master 5단계로 나누어 코드를 관리한다.

Master Branch

Master Branch(메인 배포판)는 실제로 클라이언트에서 이용하는 최종 형태의 메인 Branch이다.

Develop Branch

Develop Branch(메인 개발) 현재 개발이 진행 중인 메인 Branch이다.

Master Branch와 마찬가지로 추가적으로 생성 또는 삭제되지 않는 Branch이다.

Feature Branch

Feature Branch(추가 기능 개발) 새로운 기능을 추가하기 위해 사용되는 Branch로, 특정 기능의 개발이 필요할 때 Develop Branch에서 파생되며, 기능 개발이 완료되면 Develop Branch로 병합된다.

가장 많이 생성되었다 삭제되는 Branch이다.

Release Branch

Release Branch(배포 준비, 오류 확인) 실제로 프로젝트를 배포하기 위한 브랜치이다.

Branch는 지금까지 개발한 기능들이 있는 Develop Branch에서 파생되어, 각종 오류 사항이나 문제들을 검토 및 수정하는 일종의 테스트 서버로 볼 수 있다.

수정이 완료되면 Release BranchDevelop BranchMaster Branch로 병합된다.

Hotfix Branch

Hotfix Branch(긴급 오류 수정) Hotfix Branch는 배포된 Master Branch에서 예기치 못한 버그가 발생했을 때 급하게 Develop Branch, Feature Branch를 거치지 않고 버그를 수정하는 단계이다.

수정이 완료되면 Develop BranchMaster Branch로 병합된다.

profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

0개의 댓글