hongcheol / CS-study

cs지식을 정리하는 공간
MIT License
248 stars 30 forks source link

Git , Github, Gitlab #127

Open jslee7420 opened 3 years ago

jslee7420 commented 3 years ago

Git이란?

컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 해당 파일들에 대한 작업을 조율하기 위한 분산 버전 관리 시스템입니다. 깃을 통해 다음과 같은 작업들을 할 수 있습니다.

버전 관리 시스템
소프트웨어 개발에서 팀 단위로 개발 중인 소스 코드 같은 디지털 문서를 관리하는데 사용된다. 문서의 변경 사항들에 숫자나 문자로 이뤄진 "버전"을 부여해서 구분한다. "버전"을 통해서 시간적으로 변경 사항과 그 변경 사항을 작성한 작업자를 추적할 수 있다. - 위키백과

버전관리 시스템의 필요성

편집이 빈번하게 일어나는 텍스트 파일을 관리한다고 합시다. 파일의 편집 전 상태로 되돌아가도록 하기 위해서는 아래와 같이 파일을 관리해야 합니다.

이 처럼 파일을 관리하게 되면 어떤 파일이 최신 파일인지 어떤 부분이 변경된 것인지 관리하기가 매우 어려워지게 됩니다. 또한 하나의 문서를 여러 사람이 동시에 작성한다면 업데이트 되는 파일을 공유하는 것이 어려워지고 서로 정보를 덮어쓰는 일도 일어날 수 있습니다. 이러한 문제를 해결하기 위해 등장한 것이 바로 버전 관리 시스템입니다.

버전 관리 시스템의 종류

  1. Client-Server Model
    • 하나의 중앙 서버를 중심으로 여러 클라이언트가 각자 맡은 파트만 서버로부터 받아와 작업하고, 다시 서버로 통합
    • CVS, Subversion 등
  2. Distributed Model
    • 하나의 중앙 서버가 존재하지만, 여러 클라이언트들이 각자의 로컬 컴퓨터 저장소에 중앙 서버의 전체 사본을 가지고 작업
    • Git

Git의 버전 관리방식

Git이 파일들의 변경사항을 버전별로 관리하기 위해서 파일들을 어떤 식으로 인식하고, 어떠한 단계로 관리하는지 알아봅시다.

1. Git의 3가지 영역(단계)

Git은 아래 세가지 작업영역으로 파일을 관리합니다.

git areas

2. Git의 3가지 상태

git은 파일의 변경사항 들을 버전별로 관리하기 위해서 파일들을 Committed, Modified, Staged 3가지 상태로 관리를 합니다.

3. Git File Status Lifecycle

git에 의해 관리되는 파일들을 라이프사이클 관점에서 살펴봅시다. Working Directory에 있는 파일들은 크게 Tracked 상태와 Untracked 상태로 분류됩니다. Tracked 상태는 좀 더 세부적으로 Unmodified, Modified, Staged 상태로 분류될 수 있습니다. Git의 파일들은 반드시 해당 4가지 상태중 하나의 상태를 가지게 되고, 4가지 상태를 반복적으로 순환합니다.

git file status lifecycle

원격 저장소와 로컬 저장소

Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공합니다.

Github와 Gitlab

Github와 Gitlab 모두 분산 버전 관리 툴인 깃 저장소 호스팅을 지원하는 웹 서비스입니다. 원격 저장소를 제공하는 웹 호스팅 서비스라고 할 수 있습니다.

Git 프로세스와 명령어

git process

Git Branch

git branch 여러 사람이 동일한 소스코드를 기반으로 서로 다른 작업을 할 때에는 각각 서로 다른 버전의 코드가 만들어 질 수 밖에 없습니다.이럴 때, 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능이 바로 '브랜치(Branch)' 입니다.

브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념입니다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있습니다.

만들어진 브랜치는 다른 브랜치와 병합(Merge)함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있습니다. 저장소를 처음 만들면, Git은 바로 'master'라는 이름의 브랜치를 만들어 둡니다. 이 새로운 저장소에 새로운 파일을 추가 한다거나 추가한 파일의 내용을 변경하여 그 내용을 저장(커밋, Commit)하는 것은 모두 'master' 라는 이름의 브랜치를 통해 처리할 수 있는 일이 됩니다.

Git 브랜칭 전략

여러 사람이 다양한 브랜치를 생성하고 사용하게 되면 브랜치를 어떤 식으로 관리하고 생성할 것인지에 대한 약속이 필요합니다. Git 브랜치를 효과적으로 나누고 관리하는 전략들에 대해 알아봅시다.

Git-flow

Git-flow는 Git이 새롭게 활성화되기 시작하는 10년전 쯤에 Vincent Driessen이라는 사람이 만들어낸 브랜치 관리 전략으로 현재는 Git으로 개발할 때 거의 표준과 같이 사용되는 방법론입니다.

Git-flow는 5가의 브랜치를 사용해서 운영합니다. git-flow

Github-flow

Git-flow가 Github에서 사용하기에는 복잡하다고 나온 브랜칭 전략.

github flow

  1. master: master 브랜치는 항상 최신 상태며, stable 상태로 product에 배포되는 브랜치
  2. 새로운 일을 시작하기 위해 브랜치 를 master에서 딴다면 이름은 어떤 일을 하는지 명확하게 작성
    • 브랜치는 항상 master 브랜치에서 만든다
    • Git-flow와는 다르게 feature 브랜치나 develop 브랜치가 존재하지 않음
  3. 원격지 브랜치로 수시로 push 하자
    • 항상 원격지에 자신이 하고 있는 일들을 올려 다른 사람들도 확인할 수 있도록 해준다
    • 이는 하드웨어에 문제가 발생해 작업하던 부분이 없어지더라도, 원격지에 있는 소스를 받아서 작업할 수 있도록 해준다
  4. 피드백이나 도움이 필요할 때, 그리고 merge 준비가 완료되었을 때는 pull request를 생성한다
  5. 기능에 대한 리뷰와 사인이 끝난 후 master로 머지한다.
  6. master로 머지되고 푸시되었을 때는 즉시 배포되어야 한다.
    • GitHub Flow의 핵심인 master로 머지가 일어나면 hubot을 이용하여 자동으로 배포가 되도록 설정해놓는다.

git 튜토리얼

실제 git의 사용법을 익히고 싶으시다면

Reference

jslee7420 commented 3 years ago
  1. 깃과 깃헙이 무엇인가요?
  2. git flow에 대해 설명해주세요