Git/GitHub에 대해 알아보기

Sungchan Ahn(안성찬)·2024년 9월 9일

내일배움캠프

목록 보기
22/104

1. Git, GitHub

  • 분산 버전 관리 시스템(Distributed Version Control Systems - DVCS)
    팀을 이뤄 여러 명의 개발자가 하나의 프로젝트를 진행할 때, 코드의 변경 내용을 추적하고 관리하는 데 사용되는 분산 버전 관리 시스템이다.

  • GitHub은 Git을 기반으로 클라우드 서버를 제공하는 웹 호스팅 서비스이다. 클라우드 서비스이기 때문에 구성원들 간의 소스코드 공유가 용이하다.

2. 버전 제어의 필요성

  • 버전 사용
    모든 버전에는 버그 수정이나 기능 추가와 같은 버전 변경 내용에 대한 설명이 있다. 이 설명은 팀이 버전별로 코드 변경 내용을 따르는 데 도움이 된다. 버전에 저장된 코드는 필요에 따라 언제든지 버전 제어 기능을 통해 확인하고 복원할 수 있다.

  • 함께 코드 작성
    버전 제어는 버전을 동기화하고 변경 내용이 다른 사용자의 변경 내용과 충돌하지 않도록 한다. 팀은 사용자가 동시에 변경하는 경우에도 충돌을 해결하고 방지하기 위해 버전 제어를 사용한다.

  • History 기록
    새 버전의 코드를 저장할 때 변경 기록을 유지한다. 팀 구성원은 기록을 검토하여 누가, 왜, 언제 변경되었는지 확인할 수 있다. History는 언제든지 이전의 좋은 버전으로 롤백하기 쉽다.

3. Git의 이점

  • 동시 개발
    구성원 개개인은 고유한 로컬 코드 복사본을 가지고 있고, 각자의 branch에서 동시에 작업할 수 있다.

  • 팀프로젝트
    pull과 push를 통해 중요 branch에 merge하기 전에 서로의 작업에 영향을 주지 않고 팀과 공유하고 변경 내용을 논의할 수 있다.

  • 안정적이고 더 빠른 releases
    branch를 이용해 releases할 버전과 작업할 것들을 분리하여 안정적으로 코드를 관리하고 업데이트를 더 빠르게 배포할 수 있다. 문제없이 잘 만들어진 작업 결과를 releases 버전에 merge하여 빠르게 업데이트를 진행할 수 있다.

4. Git 용어 정리

  • 로컬 저장소 (Local Repository) : 작업자의 개인 컴퓨터 저장소

  • 원격 저장소 (Remote Repository) : 구성원들의 파일을 공유하고 통합하기 위한 저장소

  • History : 버전 변경 기록. 파일 내용을 추가, 변경하고 Commit을 하면서 쌓이는 버전들의 변동사항들을 각 시점마다 확인 할 수 있다.

  • Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업

  • fetch : 저장소 변경 내용 확인

  • Pull : 원격 저장소의 변경된 내용을 로컬 저장소에 적용하는 작업

  • Push : 로컬 저장소의 변경된 내용을 원격 저장소에 저장하는 작업

  • Branch : 기존 작업 내용을 복사하여 만든 작업을 위한 저장소(가지, 분기점). Branch에서 작업을 한 후 원하는 결과가 나왔을 때 상위 Branch와 Merge를 한다.

  • Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미

  • Snapshot : 특정 시점의 프로젝트 소스 코드의 버전

  • Head : 현재 작업중인 Branch

5. GitHub의 기본적인 동작

원격 저장소 내에 main, Dev Branch를 생성하고 Dev A, B, C 각자의 로컬 저장소에 복제한 후 자신이 작업할 feature Branch를 생성한다. 이후 원격 저장소에 각자 feature Branch를 publish한다.

  • main Branch는 프로젝트 최종 결과물을 적용하는 Branch
  • Dev Branch는 각 구성원 Dev A, B, C가 작업한 내용을 공유, 통합하기 위한 Branch
  1. Dev A가 feature1 Branch에서 작업한 내용을 commit하고 완료하면 원격 저장소에 변경된 내용을 push한다. Dev Branch는 아직 변경이 없었기 때문에 변경 내용을 Dev Branch에 반영하고 싶다면 feature1 Branch를 Dev Branch에 Merge하고 원격 저장소에 push한다.
  2. Dev B는 feature2 Branch에서 작업한 내용을 원격 저장소에 push한다. 만약 Dev에 merge하고 싶다면, 먼저 A가 작업하여 내용이 변경된 Dev Branch를 pull 받고, 자신의 feature2 Branch와 merge하여 오류가 생기는지 확인한다. 문제가 없으면 Dev Branch에 merge한다.
    (원격-로컬 저장소 사이에 같은 Branch에서 내용 차이가 있으면 pull/push가 활성화된다.)
  3. Dev C도 B와 같은 방식을 거친다.
  4. A는 모든 작업 내용이 반영된 Dev Branch를 자신이 작업할 feature1 Branch와 동기화하여 작업을 시작하거나 feature1 Branch를 삭제하고 Dev Branch의 새로운 Branch를 만들어 작업을 시작한다.

물론 Dev Branch에 자신의 작업 내용을 바로 merge할 수 있지만 그러면 A, B, C가 작업한 내용들이 서로 충돌을 일으킬 가능성이 매우 높다.

profile
게임 개발 기록

0개의 댓글