본문 바로가기
Development Tools/Git

git 시작하기 (2) - git의 역사

by jjerryhan 2017. 11. 18.
반응형

오늘은 분산 버전 관리 시스템의 대표이자 사실상 오픈소스계의 표준 버전관리 도구인 git의 역사에 대해 알아보고자 합니다.  (국내의 한국어 위키나 일부 블로그를 보면 잘못 알려진 부분이 좀 있는 것 같아서 좀 더 상세히 기술합니다.)




Linux의 아버지 리누스 토발즈가 만든 git


git은 결국 Unix를 골로 보내고 사실상 서버OS 세상을 평정해 버린 Linux를 만든 리누스 토발즈(라이너스 토르발즈? Linus Torvlads)에 의해 만들어진 오픈소스 분산 버전 관리 도구입니다.

<리누스 토발즈의 흔한 모습(?). 어디서든 꿀릴 일이 없는 넘사벽 능력자 TechGeek>


사진의 인물이 리누스이구요. 위 장면은 리누스가 2012년에 핀란드에서 강연도중 당시 엔비디아가 리눅스를 지원하지 않아서 엔비디아 칩셋의 노트북에 리눅스 설치가 어렵다고 청중이 질문을 하자. 대답을 하면서 리눅스를 지원하지 않던 당시의 엔비디아를 확실히 까기 위해 취한 즉각적이고 당연한(?) 제스처 사진(리눅스도 지원하지 않는 엔비디아 ..... 뭐 이런 뜻) 입니다.

< Full 영상. 잘 찾아보세요 >


리누스는 사실 본인이 기술적으로 동의하지 않는 점에 대해서는 거침없이 까고 자기 주장을 펼치는 것으로 유명합니다.
(또 그 만큼 넘사벽의 능력자 이기도 합니다.) 




git 이름의 기원


리누스의 자기가 하고 싶은 데로 하는(다들 그렇게 살고 싶지만 그렇게 하지 못하는 현실 ㅠㅠ) 성격은 git의 이름을 git으로 지은 이유에서도 엿볼수가 있습니다. 

아래는 리누스가 2005년 4월 8일에 git의 소스를 git에 최초로 커밋하면서 함께 작성해서 커밋한 README파일의 내용 중 일부 입니다. 

GIT - the stupid content tracker

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not actually used by any common UNIX command.  The fact that it is a mispronounciation of "get" may or may not be relevant.

 - stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.

 - "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room. 

 - "goddamn idiotic truckload of sh*t": when it breaks

GIT - 멍청한 버전 관리기

"git" 은 기분에 따라 아무 의미나 된다.

- 그냥 뜻없는 세글짜 알파벳임. 그냥 유닉스 명령어 중에 git 이라는 게 없길래 정했음. 발음하기 좋아서리. get 이라고 하려다가 오타났음.

- 멍청하고, 한심하고, 들떨어진, 단순한 의미임. 걍 아무거나 고르셈.

- 기분이 좋으면 "global information tracker" 라고 여기셈.

- 컨디션이 뭐 같으면 "goddam idiotic truckload of sh*t" 임. (씨바 ... 뭐 이런 뜻) 

 < git 최초 커밋 참조 : https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290 >




git이 만들어진 이유?


아무튼 git은 Linux운영체제를 만든 리누스에 의해 오픈소스인 Linux의 원활한 개발관리를 지원하기 위한 목적으로 2005년에 최초로 개발되었습니다. 

git이 만들어 지기 전에 Linux커널은 BitKeeper라고 하는 분산 버전 관리 시스템(유료였지만 제작사가 Linux커뮤니티에는 공짜로 제공)을 사용하고 있었는데요, 잘 사용하고 있던 중에 Linux커뮤니티내의 한 개발자가 BitKeeper의 통신 프로토콜을 리버스 엔지니어링(컴파일된 결과파일에서 소스를 거꾸로 읽어내는 방법)하여 해킹을 하는 사건이 발생하여 BitKeeper와 Linux커뮤니티사이에 갈등이 발생하게 됩니다.

이에 BitKeeper는 Linux커뮤니티에서 더이상 공짜로 BitKeeper를 사용할 수 없도록 라이센스를 제한하게 되고, 이에 당장 BitKeeper를 대체할 버전관리 시스템이 필요 했던 리누스는 그 동안 BitKeeper를 사용하면서 경험한 분산 버전관리 시스템의 장점(한번 분산 버전관리에 맛을 들이면 기존 중앙 집중식 버전관리 시스템은 못쓰게 됩니다)과 개선해야할 사항을 고려하여 홧김에 뚝딱 개발하여 세상에 내놓은 것이 git입니다. (홧김에 뚝딱 만든게 이 정도니 할 말이 없습니다.)


git은 이러한 배경으로 인해 태어날 때 부터 아래의 요건을 만족시키도록 설계 및 구현 되었습니다.

  • 빠른 속도 (Git은 정말 빠릅니다. )

  • 단순한 구조 (사실 단순하지 않습니다. 지금은)

  • 비선형적인 개발 방식 지원 (전세계에 개발자가 온라인이든 오프라인이든 개발하고 기여할 수 있도록 만들었죠)

  • 완벽한 분산 (원격 저장소에 Pull / Push / Mege 하고 Branch 를 무한정 만들고 하는 걸 경험해 봐야 실감이 납니다.)

  • Linux 커널 같은 대형 프로젝트도 감당할 수 있을 것. (태어날 때부터 코끼리를 들어 올릴 수 있었어야 했죠)


git은 이후 Linux를 대표로 하는 오픈소스 커뮤니티와 함께 지속적으로 성장 및 개선되어 왔고 현재는 사실상 오픈소스 생태계의 표준 버전관리 시스템 역할을 담당하고 있습니다. 그래서 여전히 git자체의 버전도 계속 올라가고 있고, 기능개선도 계속 이뤄지고 있지요.

저 처럼 나이가 좀 있는 개발자들은 Source Forge(들어본 분은 아재인증!) 에서 오픈소스를 찾곤 했고, SubVersion 이나 CVS 로 소스를 받아보곤 했지만 지금은 git clone(소스를 다운로드 하기 위한 git 명령어) 으로 소스를 받지 않는 프로젝트 자체를 찾기가 어렵지요. 

따라서 git은 전 세계 수 많은 오픈소스 커뮤니티에 의해 전 세계에서 그 성능과 안정성을 모두 검증받은 가장 강력한 분산 버전 관리 시스템이라고 할 수 있겠습니다.




git과 호스팅 서비스


git의 공식 웹 사이트는 https://git-scm.com/ 입니다. (GitHub이 아니에요. 심지어 리누스가 깃헙을 만든거라고 잘못 알고 계신 분도 있죠.)

GitHub, BitBucket, GitLab 등은 원격 호스팅 서비스를 제고하는 회사의 이름입니다. 

이런 회사들은 원격 저장소를 로컬에 두고 내가 관리를 하자니 내 로컬 PC를 계속 켜두어야 해서(git에서는 로컬 저장소나 원격 저장소가 저장하고 있는 정보가 같기 때문에 내 로컬 PC를 계속 켜두고 접속 가능하게 하는 것이나 원격 저장소 호스트를 이용하는 것이나 거의 보시면 됩니다.) 24시간 가동되고 접속이 가능한 원격 저장소가 필요하겠다는 동기에서 시작된 원격 저장소 호스트 서비스일 뿐입니다. 

< 사막여우, 문어고양이, 양동이 >


물론 원격 저장소 관리에서 시작하여 버전관리와 연관된 추가 서비스를 제공하기는 하지만 git자체와는 아무런 상관이 있지 않습니다.
그래서 git 을 설치할 때도 이런 사이트 들이 아니라 https://git-scm.com 에서 다운로드해서 설치하게 되지요.


이들 서비스 중 참고할 만한 사항은 GitHub이나 BitBucket과 달리 GitLab은 설치형 Git서버를 만들자는 목표로 시작된 오픈소스로 직접 git원격 저장소 서버 환경을 구성하고 싶어하는 개발그룹을 위해 태어난 프로젝트로, GitLab에서 제공하는 호스팅 서비스를 이용하지 않고 내 장비에 GitLab을 설치해서 사용할 수 있도록 지원하고 있습니다. 

또한 비공개 개인 저장소도 무한정 공짜로 제공하고 있으니 참고하기 바랍니다.

당연히 이런 원격 저장소 호스트를 이용하지 않고도 직접 Git Server 를 구성할 수 있습니다. (당신은 능력자!). 하지만 쉽지는 않습니다. 서버 관리를 해야 하니까요.  

따라서 git은 사용하고 싶은데 외부 네트워크가 허용되지 않아서 외부 호스팅 서비스를 사용할 수는 없고 내부망에 직접 git 환경을 구성해야 하는 상황이라면 GitLab을 다운로드 해서 설치해서 사용하시면 매우 편합니다. 

GitLab 다운로드 및 설치 방법에 대해서는 다른 포스트에서 다시 상세히 다루도록 하겠습니다. (그냥 받아서 설치만 하면 되지만, 아무튼 다음 포스트에 올리겠습니다.)  


:: 다음에 계속됩니다. 

'Development Tools > Git' 카테고리의 다른 글

git 시작하기 (4) - git cli 설치  (0) 2017.11.19
git 시작하기 (3) - git 기초  (0) 2017.11.18
git 시작하기 (1) - 버전 관리란?  (0) 2017.11.17