Git
Git의 정의는 분산 버전 관리 시스템을 뜻한다.
Git 사용 목적
Git이나 SVN과 같은 분산 버전 관리 시스템을 사용하는 목적은 아래와 같은 상황 때문이다.
Git 개념
Repository
Repository는 말 그대로 파일 등이 저장되는 저장소로 즉 프로젝트 폴더를 말한다.
저장소의 종류는 다음과 같다.
Remote Repository (원격 저장소) : 원격 서버에 저장된 저장소로 여러 사람이 함께 공유한다.
Local Repository (개인 저장소) : 우리가 직접 관리하는 저장소로 내 PC에 저장되어 있다.
Commit
Commit은 프로젝트의 변경 이력을 말한다.
Stage
Stage에 대해 설명하기 전 Index에 대한 개념을 이해해야 한다.
Index는 Commit을 통해 변경사항들이 반영되기 전 해당 변경사항의 이력들이 저장되는 공간이다.
따라서 우리가 특정 파일이나 코드를 변경 시 해당 이력은 Index에 기록된다.
이때 이 기록되는 행위를 Stage 또는 Staging이라 한다.
따라서 다음과 같이 5개의 변경사항이 있을 시, 그 중에서 원하는 변경 사항만 stage하고 원하지 않는 변경 사항은 unstage 한 뒤 commit을 진행하면 된다.
Branch
Branch는 특정 커밋으로부터 분기되는 포인터를 말하는 것으로, 여러 명이 같은 코드를 공유하며 협업하는 상황에서 각 개발자들이 개발을 진행하고 있는 환경 또는 흐름을 말한다.
각 개발자들은 여러 Commit을 만들며 프로젝트를 개발하는데, 이때 누가 어떤 Commit을 추가했는지 구분이 가능해야 한다.
이때 사용되는 것이 바로 Branch이다.
새로운 Branch가 생성되더라도 기존의 메인 Branch는 그대로 남아있다.
위와 같이 한 사용자가 자신의 기능의 세부 Branch를 또 다시 나눌 수도 있다.
Branch 생성 가능 갯수에는 제한이 없다.
Checkout
Checkout은 현재 위치한 Commit에서 다른 Commit으로 이동하는 것을 말한다.
Checkout을 통해 현재 Commit에서 같은 Branch내 다른 Commit으로 이동하거나 다른 Branch 내 Commit으로 이동할 수 있다.
Checkout으로 인해 이전 시점의 버전으로 되돌아갈 수도 있고, 다른 사람의 Branch로 전환해 다른 개발자들의 코드 진행 상황을 확인해 볼 수도 있다.
Merge
Merge는 나뉘어진 Branch를 다시 하나의 Branch로 합치는 것을 말한다.
가장 오류가 많이 발생하는 과정이니 주의
Merge 진행 시 현재 Branch를 Brancg가 합쳐지는 기존 메일 Branch로 전환한 후 수정된 Branch를 Mrege해야 오류가 발생하지 않는다.
여러 개의 Branch들을 한꺼번에 Merge할 때도 마찬가지로 차례차례 기존 Branch상태에서 Merge를 진행한다.
또한 Merge에는 종류가 2가지가 있다. 하나는 fast-dforwad이고, 나머지 하나는 non fasf-forward이다.
fast-forward는 기본 merge 방식으로, 서로 다른 두 Branch를 충돌 없이 자동 merge시키는 병합니다.
하지만 그 과정에서 때때로 일부 문법으로 인해 충돌이 발생하면 병합에 실패하는 경우가 발생한다.
이때 해당 충돌 기록을 살피며 일일히 해당 코드를 수정한 뒤 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이다.
Develup Branch
Develop Branch 현재 개발이 진행 중인 메인 Branch이다.
Master Branch와 마찬가지로 추가적으로 생성 또는 삭제되지 않는 Branch이다.
Feature Branch
Feature Branch 새로운 기능을 추가하기 위해 사용되는 Branch로 특정 기능이 개발이 필요할 때 Develop Branch에서 파생되며, 기능 개발이 완료되면 Develop Branch로 병합된다.
가장많이 생성되었다 삭제되는 Branch이다.
Release Branch
Release Branch 실제로 프로젝트를 배포하기 위한 프랜치이다.
이 Branch는 기즘까지 개발한 기능들이 있는 Develup Branch에서 파생되어, 각종 오류사항이나 문제들을 검토 및 수정하는 일종의 테스트 서버로 볼 수 있다.
수정이 완료되면 Release Branch는 Develup Branch와 Master Branch로 병합된다.
Hotfix Branch
Hotfix Branch Hotfix Branch는 배포된 Master Branch에서 예기치 못한 버그가 발생했을때 급하게 Develop Branch,Feature Branch를 거치지 않고 버그를 구정하는 단계이다.
'IT > GitHub' 카테고리의 다른 글
[실무] 깃허브 remote error GH006 에러 (0) | 2022.06.15 |
---|---|
SVN의 개념 및 GIT과의 차이점 (0) | 2022.06.15 |