git 이란
프로젝트를 관리하는 '분산 프로젝트 버전관리 소프트웨어' (Distributed Version Control Systems(DVCS))
버전관리 소프트웨어란?
개발 중 변경 내역을 추적할 있도록 개발된 소프트웨어를 말한다. 즉, 버전별로 저장되어 변경된 사항을 알 수 있게 한다. 이전 버전과 차이를 알 수 있고, 이전 버전을 볼 수 있다.
작은 규모의 프로젝트면 모르겠지만 많은 개발자가 함께 개발해 나가는 프로젝트에서 많은 파일, 많은 소스코드가 변경되고 추가된다면 이 '버전관리 프로그램'은 굉장한 힘을 발휘한다.
오늘날 많이 사용되는 형상 관리 도구의 두 축이 있는데, 바로 SVN과 GIT이다. 한때 SVN이 널리 사용되었지만, 근래에 들어 GIT이 등장하고 나서부터 SVN을 사용하던 많은 기업들이 GIT으로 갈아타고 있는 추세라고 한다.
SVN과 GIT은 모두 소스코드의 효율적인 관리를 위한 형상 관리 도구이지만, 비슷하면서도 많은 점이 다르다. SVN과 GIT의 가장 큰 차이점을 나타내는 한 단어가 있는데, 바로 '분산'입니다. SVN은 중앙 집중식 소스코드 관리 방식인데 반해, GIT은 분산 소스코드 관리 방식이다. 즉, GIT을 사용할 경우 중앙 저장소가 폭파되더라도 분산되어 있는 로컬 저장소를 이용해 중앙 저장소를 복원할 수 있습니다.
저장소 (Repository)
소스코드가 저장되어 있는 여러 개의 브랜치(Branch)들이 모여 있는 디스크상의 물리적 공간을 의미한다.
원격 저장소만 있는 SVN과 달리, GIT에서는 저장소가 로컬 저장소(Local Repository)와 원격 저장소(Remote Repository)로 나뉜다.
작업을 시작할 때 원격 저장소에서 로컬 저장소로 소스코드를 복사해서 가져오고(Clone), 이후 소스코드를 변경한 다음 커밋(Commit)을 한다. 이 때, 커밋한 소스는 로컬 저장소에 저장되며, 푸시를 하기 전에는 원격 저장소에 반영되지 않는다.
오픈소스코드 등을 구하려고 사이트에 방문하면 다음과 같이 git 이나 http 프로토콜로 시작하는 저장소 주소만 달랑 써져 있는 경우를 자주 접할 수 있다.
이전에는 오픈소스 코드를 배포할 때 버전별 압축파일 형태로 배포했으나, GIT이 등장한 이후 위와 같이 저장소를 통해 배포하는 경우가 많아졌다.
위와 같이 임의의 사용자가 마음대로 다운받을 수 있도록 공개된 저장소가 있는 반면, 인증된 사용자만 접근할 수 있는 비공개 저장소도 있다. 단, 공개된 저장소일지라도 저장소의 다운로드만 가능하며, 수정된 코드를 저장소에 반영하기 위해서는 저장소 관리자의 허가를 받고 SSH 키를 등록해야 한다.