'리눅스커널'에 해당되는 글 1건

  1. 2011.08.06 Git으로 시작하는 프로젝트 관리 -1. SW 버전 관리 시스템의 역사
CrazySoftware2011. 8. 6. 13:18

 최근은 아니지만, 몇년 전 부터 리누스 토발즈가 만든 Git이라는 녀석이 유행 하고 있습니다저 또한 Subversion을 쓴지도 얼마 안돼서 금새 Git으로 갈아타는 것을 두려워하다가결국 , 이번에 새로 시작하는 개인 프로젝트는 Git으로 시작하게 되었습니다그러면서 Git을 쓰다보니까 이전보다 편한 것 같아서 입문 하시려는 분들께 도움이 되고자 이렇게 써볼까 합니다.

 
먼저 이번 글은 SW 버전 관리 시스템에 대해서 말하고, Git이 어떤 특징을 가지는지 잠이 오는 이야기를 해볼까 합니다.
 SW
버전 관리 시스템은 CVS에서 Subversion으로 갔다가 이제는 Git으로 조금씩 움직이고 있습니다.

CVS
 

 
제일 먼저 나온녀석은 CVS(Concurrent Version System)입니다. Git의 할아버지 쯤 되는 녀석 입니다.
 
물론, 나온 년도는 제가 태어난 1986년 산이군요. 무려 25년 전 시스템 입니다. 아직도 CVS 현업에서 쓰시는 분들은 무려 25년전 방식으로 소프트웨어 개발하시는 겁니다;; 물론 1971년에 태어난  ftp를 쓰시는 분들보다는 낫겠지만요 --;

 CVS
는 단순히 파일을 관리하는 용도로 만들어진 녀석 입니다. 물론, SunOS커널 및 윈도우즈 개발에도 사용 할 만큼 '왕년에는 잘 나갔던 녀석'임에는 분명 합니다

 
하지만 분명히 한계가 아래와 같이 존재 합니다.
-
저장소(Repository를 말합니다. 이하 저장소라고 합니다)의 파일들은 이름 변경 불가.
-
디렉토리는 이동하거나 이름을 바꿀수 없음.
-
유니코드 파일의 제한적 지원
-
기본적으로 원자성 커밋을 지원하지 않음. 여러 파일을 한번에 커밋하면 여러개의 파일이 각각의 리비젼을 갖습니다.

한 숨이 나오지요? 파일 이름도 못바꾸고, 디렉토리도 그대로, 유니코드도 안된다니. 게다가 여럿이 동시에 커밋하면 원자성 보장도 하지 않습니다. 이런녀석으로 개발 하신분들께 경의를 표하면서, 다음 2000년산 Subversion으로 넘어가 보죠.

Subversion
 

 
그 다음 나온 녀석이 바로 이 Subversion입니다. 이녀석은 아직도 현역에서 쌩쌩 날아다니는 녀석이지요. 물론 나온지는 이제 한 11년 째가 되는 녀석이네요. 2000 10월에 CollabNet, Elego, WANdisco, VisualSVN의 개발자 들이 보여서 만들어 냈습니다. 뭐 이녀석도 Apache Foundation, GCC, Django, Ruby, Free Pascal , SourceForge 등 수많은 프로젝트를 탄생 시킨 장본인 이므로 경력은 아버지에 비해 화려하다고 할 수 있죠.
 
하지만 기존 CVS의 단점을 보완한  Subversion도 완벽 할 수는 없었고, 사람들은 거부반응을 일으키기 시작 했습니다.
 Subversion
은 중앙 집중 방식의 버전 관리 시스템 입니다. 중앙 집중 방식이란 무엇이냐면, 항상 메인이 되는 Repository가 있어야 한다는 것입니다. 즉 메인 SVN서버가 있으며, 다른 사람들은  Repository에서 CheckOut한 후에 Commit 할 수 있을 뿐이지, 절대로 Check Out 한 파일들이 다시 하나의 Main Repository가 될 수 없습니다. 여기서 나타나는 문제는 다음과 같습니다하나의 SVN 서버가 반드시 구동중이어야 하며, SVN에 접속 할 수 있는 네트워크를 갖추고 있어야 합니다. 이러한 중앙 집중 방식은 결국 리누즈 토발즈를 화나게 하고 포풍까임을 당한 후에 Git을 탄생 시킵니다.
 
또한, Subversion은 기능적인 문제점도 있었습니다. Repository 자체에 대한 administration feature management feature가 부족 했습니다. 누군가는 특정 파일에 대한 모든 기록을 삭제 하고 싶기도 했고, 그 파일을 영구적으로 수정 하고 싶기도 했지만 이따위 기능은 절대 불가능 했습니다!( 써보신 분들은 아실겁니다. 이게 얼마나 짜증 나는 일인지, 물론 이후에 클라이언트 프로그램들에서 특정 디렉토리를 지우고 커밋하는 방식으로 우회적으로 이런 기능을 가능케 했지만 실제로는 안됩니다. 결국 훼이크). 또한, 파일 이름 수정이 가능 해지긴 했지만 완벽하지는 못했습니다. 실제로 폴더 이름을 바꾸면, 이전에 있는 모든 파일을 삭제하고 폴더를 새로 만들어서 복사해버립니다. 이런 방식에는 상상을 초월하는 문제점이 있어요. 제 몇 일전의 악몽 같은 경험을 말하자면 대략 이렇습니다
 
파일들이 너무 한곳에 몰려 있어서 분류 하려고, 한사람이 분류하고 이름을 변경하고 코드를 커밋합니다. 그리고 다른 사람이 업데이를 하는 순간 지옥 문이 열립니다. 만약 기존에 작성하고 있던 코드가 있다면 정말 홀랑 파일 자체가 지워져 버립니다

 , 뭐 이런 등등의 이유로 인해서 Subversion을 대체하는  Git이 나오게 됩니다

Git  
 

Git 2005년에 처음 프로토 타입이 나온 따끈 따끈한 녀석 입니다. 분산 저장소를 원했고, 조금 더 빠른 Subversion을 원했던 리누즈 토발즈가 만들어 낸 녀석이죠. 이 녀석 이름이 왜  Git이냐고 물어보시는 분들이 계실 까봐 말 하면, 애초에 Git이라는 말은 멍청이 라는 영국식 농담이랍니다. 그런데 왜 Git이냐면, 이게 리누즈 토발즈가 만든건데, 리누즈 토발즈는 모든 프로젝트에 자기와 관련된 이름을 짓는 답니다. 처음에 리눅스도 자기 이름에서 따온 것이고, 이제는 자기가 멍청이(Git)라는 의미로 이름이 붙인겁니다이제 이상한 소리는 그만하고, 진짜 재미있는 이야기를 해보도록 하죠.

토발즈는 Git을 리눅스 커널을 개발하기 위한 툴로 디자인 했습니다. 대표적인 특징은 distributed revision control system 이라는 점이죠. 이 얘기는 다른 어떠한 장점 보다도 많은 의미를 내포 하고 있습니다. 먼저, 오프라인에서 개발이 가능 하다는점이 있습니다. 그리고, 한 대의 컴퓨터 안에서도 clone을 통해서 수많은 브랜치를 관리 할 수 있습니다. 마치 프로세스를 포크 하는 것 처럼 프로젝트 브랜치를 포크하고 커밋한 다음에 원하는 repository쪽으로 push 하면 되는 거죠. 게다가 이 수많은 브랜치들을 이전의 Subversion과 달리 한녀석에 "쉽게" merge 할 수 있는게 강점 입니다

 
현재 GitHub라는 곳에서 이전의 Sourceforge와 같이 수 많은 오픈소스 프로젝트들을 호스팅 하고 있고, 매우 재미있습니다!

 
자 이번에는 과연 CVS Subversion, Git이 무엇인지 알아 보았습니다. 다음에는 실제로 Git을 사용 하는 방법에 대해서 말씀 드리고자 합니다.
 
연습 환경아래와 같습니다.
- http://codesion.com
의 무료 호스팅
- OSX Lion

**
추가**
Git
CVS  Subversion으로 이미 수행 하는 프로젝트 들에대해서 완벽하게 호환 가능 합니다.

Posted by Arnold Arnny

댓글을 달아 주세요