분산 버전 관리 시스템 Git과 외부 저장소 Github

개발자의 일상, @munondio 팔로우 해보세요!

'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에 돈을 지불하고 서비스를 사용해야 합니다.

하지만, 많은 사람들이 무료로 서비스를 사용하고 싶어하다보니, 많은 소스코드가 공개되었고 자연스럽게 소스코드를 공유하는 문화가 생기게 되었습니다. 이는 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 명령어를 통해서 외부 저장소를 내부 저장소로 복제 할수 있습니다.