Git과 Github

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

버전 관리 시스템

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

분산 버전 관리 시스템

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

Git이란?

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

Git의 구조

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

Branch 모델

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

Github란?

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

Git 최종 정리

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

Git 추가 내용

  • Cherry-pick이란 다른 branch의 commit을 골라오는 것입니다.
  • Reset을 하면 해당하는 commit 상태로 reset 되고 그 이후의 commit은 사라집니다.
  • Reset은 soft, mixed, hard reset이 존재합니다.
  • Revert이란 이전 commit 내역을 그대로 남겨둔채 해당하는 commit만 되돌리는 것입니다.

참고