Git/GitHub 개념

Git&GitHub 2015. 11. 5. 06:28

* 버전 관리 시스템 (Version Control System)

소프트웨어의 코드를 추가 또는 변경하는 과정을 모두 기록하여 특정한 시점으로 돌아가거나, 문제가 생긴 파일을 복원하는 등, 소프트웨어 개발 현장에서 사용하는 프로그램(시스템) 이다. CVS(Concurrent Versions System, 동시 버전 관리 시스템), SVN(Subversion), Git 등이 있다.



우리가 보통 프로젝트를 작업 할 때 프로젝트 진행과정에서 발생하는 수정사항이나 백업이 필요한 부분을 저장하기 위해 위와 같이 여러 개의 파일을 폴더 내에 복사하고 파일명을 구분되게 하는 방법을 사용한다. 이것을 버전 관리라 볼 수 있다. 하지만 이러한 방법은 프로젝트가 진행될수록 어떠한 파일이 어떤 부분이 변경된 것이고 왜 복사를 해두었는지 파악하기가 어려워진다. 최악의 경우 실수로 파일을 삭제해버리는 경우도 있다. 이러한 문제를 해결하기 위해 소스코드를 효율적으로 관리하기 위해 만들어진 것이 Git와 같은 버전 관리 시스템이다.


* 로컬 버전 관리 시스템

처음 버전 관리 시스템이 등장했을 때 간단한 데이터베이스에 해당 파일의 변경 사항을 아래와 같이 기록하였다. 유명했던 VCS 도구들 중 현재에도 널리 쓰이는 것으로 RCS라 불리는 시스템이 있다. RCS의 기본적인 동작 방식은 각 리비전들 간의 패치 세트(patch set)라고 하는 데이터의 차이점들을 특별한 형식의 파일에 저장, 특정 시점의 파일 내용을 보고 싶을 때 해당 시점까지의 패치들을 모두 더하여 파일을 만들어내는 것이다.



* 중앙집중식 버전 관리 시스템 (Centralized Version Control System)

또 다른 문제는 시스템 외부에 있는 개발자들과 함께 작업하는 것이다. 중앙집중식 버전 관리 시스템은 이 문제를 해결하기 위해 개발되었다. CVS, Subversion, Perforce와 같은 시스템들이 여기에 속한다. 서버에 저장소(Repository)를 집중시켜 배치. 하나의 소프트웨어를 개발할 때 하나의 리포지토리만 존재한다. 이 중앙 서버에서 다수의  개발자가 파일들을 가져옴으로써(checkout) 위의 문제를 해결한다. 또한 데이터가 중앙 서버에 집중되므로 관리하기가 매우 단순해진다. 하지만 서버에 접속할 수 없거나 서버가 고장나면 최신 소스 코드를 받아올 수 없는 문제점이 있다.


* 분산 버전 관리 시스템 (Distributed Version Control System)

분산 버전 관리 시스템은 앞서 말한 문제를 해결하기 위해 개발되었다. Git, Mecurial, Bazaar, Darcs 등 분산 버전 관리 시스템에서는 클라이언트가 파일들의 마지막 스냅샷을 가져오는 대신 저장소(repository)를 통째로 복제한다. 따라서 서버에 문제가 생겨도 어느 클라이언트든 복제된 저장소를 다시 서버로 복사하면 서버가 복구된다. 체크아웃(checkout)을 할 때마다 전체 백업이 일어나는 셈이다.



집중형과 달리 여러 개의 저장소(Repository)가 존재한다. 서버에 있는 저장소를 원격 리포지토리라고 하며 개인마다 자신의 PC에 로컬 리포지토리라고 한다. 이로인해 사용자는 서버에 있는 저장소에 접속하지 않아도 개발이 가능하다. 하지만 중앙집중식 버전 관리 시스템에 비해 다소 복잡해진다. 아래의 그림의 Fork(포크)는 GitHub에 있는 특정 리포지토리를 자신의 계정으로 복제하는 것이고, 이렇게 복제된 리포지토리는 원래 리포지토리와 완전히 다른 리포지토리가 된다. 또한 서버(GitHub)와 사용자 만의 push, pull이 아닌 다른 사용자 사이에도 직접 push, pull이 가능하다.



* Git와 GitHub의 차이

Git은 Git 리포지토리라고 불리는 데이터 저장소에 소스 코드 등을 넣어서 이용하는것으로, 이러한 Git 리포지토리를 인터넷상에서 제공하는 서비스(호스팅 서비스)가 GitHub이다. GitHub에서 공개되는 소스 코드는 모두 Git으로 관리된다.


<출처 : https://git-scm.com/book/ko/v1/, https://backlogtool.com/git-guide/kr/, https://opentutorials.org/course/1492>

Posted by gangju
,