Swift를 위한 Git과 Github

  • "Git"이란 개발자가 작성한 소스 코드 관리를 위한 "분산 버전 관리 시스템"이다.
  • 그렇다면 분산 버전 관리 시스템이란 무엇이고 일반 버전 관리 시스템과는 어떻게 다를까?

버전 관리 시스템

  • 버전 관리 시스템이란 이름에서도 그대로 나타나듯이,
  • 프로젝트 파일의 변경사항을 추적할 수 있도록 도와주는 시스템이다.
  • 사용자가 변경한 모든 내용을 버전별로 관리하고, 이것이 저장되는 곳을 repository라고 부르는 것이다.
  • 그리고 사용자가 repository에 변경 내용을 저장하는 것을 commit이라고 한다.

swift-github

  • 일반 버전 관리 시스템은 하나의 중앙 저장소에 사용자들이 변경사항을 전달한다.

분산 버전 관리 시스템

  • 분산 버전 관리 시스템은 버전 관리 시스템과 같은 구조를 갖고 있지만,
  • 개인 저장소를 갖고 있다는 점에서 차이가 있다.
  • 즉, '작업공간 <-> 외부 저장소'라는 일반적인 패턴에서
  • '작업공간 <-> 개인 저장소 <-> 외부 저장소'라는 패턴으로 변경하는 것이다.
  • 이를 통해, 네트워크에 연결이 되어 있지 않은 상황에서도 작업을 할 수 있게 되었고,
  • 모두에게 공개하고 싶지는 않은 사항을 개인 저장소에서 개인적으로 작업해볼수 있게 되었다.

Git이란?

  • 이러한 시스템의 한 종류가 Git이다.
  • 빠른 속도와 성능을 바탕으로 했고, 분산 작업이 가능하다.
  • Git에는 staging area가 존재해 index라는 추가적인 과정을 거친다.
  • 또한 Git의 가장 대표적인 특징은 branch 모델이 존재한다는 것이다.

Git의 구조

  • Work Space > Index > Internal Storage > External Storage

swift-github

  • Git은 이 순서를 거쳐서 소스코드 버전이 관리된다.
  • Work Space는 현재 프로젝트의 작업이 이뤄지는 곳이고,
  • Index는 Work Space의 내용이 Internal Storage에 저장되기 전에 올려가는 중간 단계 공간이다.
  • Internal Storage는 Git이 설치된 컴퓨터 저장공간이고,
  • External Storage는 외부에 저장되는 중앙 저장소로 Github가 이에 해당하는 대표적인 서비스이다.

Branch 모델

swift-github

  • Git에는 Branch 모델이라는 대표적인 기능이 있다.
  • 그림과 같이 개발 중에 가지치기(Branch)를 통해 따로 개발했다가, 나중에 합치는(Merge) 기능이다.
  • Branch 모델은 Commit을 통해 Head를 생성하다 Branch를 통해 새로운 가지를 치고,
  • Checkout으로 작업환경을 변경해서 Merge로 최종적으로 합치는 방법이다.

Github란?

  • 위에서도 언급했지만, Github란 Git이라는 시스템의 일부를 서비스하는 기업의 이름이다.
  • 조금 더 자세히 말해서, Github는 중앙 저장소 서비스를 제공하는 기업이다.
  • 저장소에 올린 소스코드를 공개한다는 조건하에 무료로 서비스를 제공해준다.
  • 하지만, 만약 소스코드를 공개하고 싶지 않거나 감추고 싶다면 Github에 돈을 지불하고 서비스를 사용해야 한다.
  • 현재는 Private Repository도 일부 무료가 되었다.
  • 하지만, 많은 사람들이 무료로 서비스를 사용하고 싶어하다보니,
  • 많은 소스코드가 공개되었고 자연스럽게 소스코드를 공유하는 문화가 생기게 되었다.
  • 이는 Github가 지금처럼 크게 성장한 주요 원인이기도 하다.

Git 최종 정리

swift-github

  • git은 분산 버전 관리 시스템으로 프로젝트 변경 이력을 관리하는데 도움을 준다.
  • git의 작업이 이뤄지는 저장소의 시점을 work tree라고 하며
  • branch 생성을 통해서 다양한 시점의 작업이 가능하다.
  • branch를 현재 작업tree로 변경하기 위해서는 “checkout”명령을 통해서 변경 가능하다.
  • ($git checkout branch_name)
  • index영역이 존재해서 work tree에서 작업한 내용을 곧바로 내부 저장소에 저장하지 않고,
  • 선별적으로 저장할 내용을 add 할 수 있다.
  • commit 명령을 통해 index에 있는 변경, 내용을 내부 저장소에 저장 할 수 있다.
  • 외부 저장소를 이용해서 중앙 집중 저장소로 사용할 수 있다.
  • 대표적인 외부 저장소로는 github란 서비스가 있다.
  • push & pull을 통해 외부 저장소에 데이터를 저장하고 불러올 수 있다.
  • clone 명령어를 통해서 외부 저장소를 내부 저장소로 복제 할수 있다.

관련 글