포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

안녕하세요?

 

현재 국내에 GIT에 대한 제대로 된 문서가 없기에,  GIT 사용자 가이드에 대하여 번역을 시작하게 되었습니다.

번역의 오류로 틀린 내용이 있을 수도 있으니, 오류 발견시 댓글을 남겨주시면 감사하겠습니다.

 

GIT 사용법 (ProGIT) - 1.1. 버전 관리 시스템의 개념

 

원본 : ProGIT  Book(http://progit.org)

번역 : 김재훈(이솝 임베디드 포럼, http://www.aesop.or.kr)

 

 

Chapter 1. GIT 가이드를 들어가면서...

 

 

이 챕터는 GIT를 최초로 사용하는 사람들을 위한 기본 지식에 대해 기술 합니다.

우선, 버전 콘트롤 시스템의 개념에 대해 알아본 후, GIT를 우리의 PC에 설정하고 사용하기 위한 방법에 대해 설명하고자 합니다. 또한,  왜 GIT가 현재 차세대 버전관리 시스템으로 각광을 받고 있으며, 그 이유에 대해 알아보고자 합니다.

그리고, 우리가 GIT를 제대로 활용하는 방법을 알려드리기 위해 이 문서를 작성 하였습니다.

 

 

1.1.1. 소스 코드 버전 관리란?

 

우선, 우리는 소스 코드 버전 관리 시스템이 왜 필요한지에 대해 알아둘 필요가 있습니다.

 

소스 코드 버전 관리 시스템이란,  시간에 따라 수정 및 삭제된 파일들의 집합을 기록하는 시스템입니다.

때문에,  과거에 작업했던 특정 버전으로 소스 코드를 손쉽게 복원 및 관리가 가능하게 됩니다.

 

현재 GIT 및 SVN, CVS 등의 버전 관리 시스템은 거의 모든 파일 타입을 버전 관리를 할 수 있지만, 현재 이 문서에서 기술하는 버전 관리의 예를 좀 더 쉽게 설명하기 위해 소프트웨어의 소스 코드를 이용할 것 입니다.

 

1.1.2. 로컬 버전 관리 시스템

 

현재까지 많은 사람들은 관리를 위해, 완성된 소스코드들을 다른 디렉터리에 복사하거나, 날짜별/용도별/버전별로 압축하여 보관하는 방법을 많이 사용 합니다. 이런 방법은 매우 단순하기 때문에 대부분 일반적으로 이런 방법을 선호 합니다.

하지만, 내가 보관한 소스코드들이 어느 디렉터리 또는 어느 파일로 압축이 되었는지 잊기 쉬우며, 우연히 잘못된 디렉터리 또는 파일에 덮어 쓰거나, 삭제하는 경우가 생길 수있습니다.

 

따라서 예전에 개발자들은 이 문제를 해결하기 위해,  버전 관리를 위한 프로그램 소스 코드들을 각 버전 별로 분리해 보관할 수 있는 간단한 구조의 데이터 베이스 체계를 가지는 시스템을 개발했습니다.

이것을 로컬 버전 관리 시스템이라고 합니다. (그림 1-1 참조)

 

18333fig0101-tn.png

 그림 1-1. 로컬 버전 관리 시스템

 

위와 같은 형태의 버전 관리 시스템 중에 가장 유명한 것이 RCS라고 불리는 시스템 입니다.

 

이 RCS 시스템은 현재에도 많은 컴퓨터 시스템에 기본적으로 설치가 되어 있습니다.  

현재 PC 시장에서 많이 채용되고 있는 MacOS 운영체제의 경우, X-Code와 같은 SDK를 설치 했을 경우 이 RCS 시스템을 사용하기 위한 명령어가 포함됩니다.

 

이 RCS 시스템은 기본적으로 디스크 상의 특수 포멧을 소스코드를 저장하며, 이전 버전과 현재 버전의 변경 사항 들에 대한 패치들을 생성하여 이 집합을 보관 및 유지 하는 형태로 소스코드 버전 관리를 수행 합니다.

 

하지만, 이 시스템은 기본적으로 소프트웨어의 버전이 증가할 수록 패치들의 갯수가 누적되게 됩니다.

만약 언젠가 패치들이 너무 과도하게 누적되어 버리면, 관리가 매우 어려워 지며, 소스코드를 이전 버전으로 복원하기 위해 많은 작업이 필요하거나 심지어는 복원이 불가능한 상황까지 올 수가 있습니다.

 

따라서, 리눅스 커널 개발 프로젝트와 같이 하나의 소스코드 집합을 장기간으로 버전관리를 수행하기에는 부적합한 시스템 입니다.

 

1.1.3. 집중 버전 관리 시스템

 

RCS 버전 관리 시스템이 도입된 이후로 개발자들이 겪은 가장 큰 문제는, 다른 사람들과 소스 코드를 공동으로 개발하게 되는 상이 생겼을 경우 대처가 불가능 하다는 점 이었습니다.

 

이를 위해 CVS나 Subversion, Proforce와 같은 집중 버전 관리 시스템(CVCSs)이 개발 되었습니다.

이런 집중 버전 관리 시스템은 단일의 서버를 가지며, 이 서버에 다수의 클라이언트가 접속하여 버전 관리를 필요로 하는 모든 파일들을 서버에서 체크-아웃하는 하는 형식으로 동작 합니다.

 

집중 버전 관리 시스템은 오랜 시간 동안 버전 관리 시스템의 표준이 되어 왔습니다. (그림 1-2 참조)

 

18333fig0102-tn.png

그림1-2. 집중 버전 관리 시스템

 

이 버전 관리 시스템은 이전에 설명한 로컬 버전 관리 시스템에 비해 많은 장점을 제공 합니다.

 

예를 들면, 버전 관리 시스템을 사용하는 모든 개발자들은 해당 프로젝트에서 다른 개발자들이 어떤 작업을 하고 있는지에 대해 개략적으로 알 수 있습니다. 또한, 서버 관리자는 소스 코드 버전 관리를 좀 더 효율적으로 할 수 있습니다.

 

때문에, 하나의 소스 코드 버전 컨트롤 서버를 집중해서 관리하는 것은, 모든 프로젝트 개발자의 데이터 베이스를 각각 관리해야 하는 로컬 버전 관리 시스템 보다 훨씬 유리 합니다.

 

1.1.4. 분산 버전 관리 시스템

 

이제, 여기서 우리가 학습해야 할 분산 버전 관리 시스템(DVCS)에 대해 설명 합니다.

GIT, Mercurial, Bazzar, Darcs 등과 같은 프로그램들이 분산 버전 관리 시스템 입니다.

 

집중 버전 관리 시스템과 분산 버전 관리 시스템이 다른 점은 소스코드의 특정 버전을 체크아웃(Checkout : 버전 관리 시스템으로 부터, 작업 디렉터리에 파일이나 디렉터리를 복사하는 것) 할 때 큰 차이점이 있습니다. 

 

집중 버전 관리 시스템은 내가 작업하고자 하는 파일 또는 프로젝트 버전만 서버에서 받아오지만, 분산 버전 관리 시스템의 경우 리포지터리(Repository : 버전 관리 대상이 되는 파일 및 디렉터리, 갱신 이력을 저장한 데이터베이스)  전체를 클라이언트에 다운로드(미러링) 합니다.  

 

따라서, 버전 관리 시스템의 서버가 장애가 발생했을 경우, 분산 버전 관리 시스템의 경우 클라이언트 측에서 저장한 리포지터리를 서버로 복사하여, 손쉽게 복구 할 수 있습니다. 때로는 서버 대신 어떤 한 클라이언트가 서버의 역할을 대행할 수도 있습니다. 결국 분산 버전 관리 시스템에서 수행하는 체크 아웃 절차의 실제 역할은 모든 데이터를 서버에서 완전히 백업하는 작업 입니다. (그림 1-3을 참조)

 

18333fig0103-tn.png

그림1-3. 분산 버전 관리 시스템의 구조

 

추가적으로, 이와 같은 분산 버전 관리 시스템의 대부분은 작업하고 있는 복수의 리포지터리를 동시에 취급할 수 있기 때문에, 동일한 프로젝트 내에 있는 소스코드의 경우 동시에 다른 방법으로 다른 사람들 혹은 다른 그룹과 공동 작업이 가능 합니다. 따라서, 기존의 집중 버전 관리 시스템에서 불가능 했던 계층적 리포지터리 모델을 구축하거나, 소스코드 관리의 작업 및 체크아웃 절차를 계층적으로 관리할 수 있게 됩니다.

 

예) 리눅스 커널 :

      메인 커널 리포지터리 -> ARM 관련 커널 리포지터리 -> 삼성 커널 리포지터리 로 세개의 계층 구조 일 경우

      1) 삼성 커널 작업 자는 삼성 커널 리포지터리에 수정 코드를 입력 -> ARM 관련 커널 리포지터리로 통합

          -> 메인 커널 리포지터리로 통합

       2) TI 커널 작업자는  -> TI 커널 리포지터리에 수정 코드를 입력 -> ARM 관련 커널 리포지터리로 통합

          -> 메인 커널 리포지터리로 통합

profile

인생은 연극이고 세상은 무대이다!

이솝 임베디드 포럼 운영 및 비즈니스와 관련된 것 이외에 E-Mail이나 메신저 및 휴대폰 등을 통한 개인적인 질문 및 답변은 받지 않습니다. 문의 사항은 이솝 임베디드 포럼 게시판을 이용해 주시면 감사하겠습니다.

첨부
엮인글 :
http://www.aesop.or.kr/index.php?mid=Board_Documents_Linux_Applications&document_srl=35568&act=trackback&key=79a

미스터쿨

2010.01.18 07:55:18
*.104.123.28

훌륭하십니다 만인을 위해 이런 좋을 하시고^^

쏘프트

2010.01.30 12:15:10
*.149.69.226

와우.. 감사합니다..

정철진

2010.07.01 02:39:09
*.150.54.136

예전에 훑어 지나갔었는데 갑자기 필요한 일이 생겨 요긴하게 보고있습니다.

 

감사합니다.

김태현

2010.09.09 05:28:15
*.150.55.75

좋은자료 감사한 마음으로 보겠습니다.

쇼박스

2010.10.15 02:05:54
*.212.13.188

감사합니다.

본님

2011.02.15 22:29:57
*.216.33.194

도움이 많이 되었습니다.

감사합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
93 Yocto project 소개자료 [2] 고도리 2019-08-24 869
92 Yocto zynq howto - 예전자료 고도리 2019-08-24 279
91 apache-1.3.33 arm porting by tssuk [3] 고도리 2013-05-21 3336
90 i2c scan하는 코드입니다. 고도리 2012-07-27 5234
89 dropbear ssh daemon 포팅하기 [1] 고도리 2012-06-30 5825
88 ffmpeg을 이용한 camera 영상 저장 file [1] 고도리 2012-05-01 5892
87 Linux application에서의 clock과 system timer설정 고도리 2011-08-15 7383
86 ffmpeg x86 compile & cross compile howto file 고도리 2011-08-05 7832
85 oss를 이용한 read, write, read/write program file [2] 고도리 2011-01-25 10531
84 GIT 사용법 (ProGIT) - 2.6. 태그(TAGS) 붙이기 [2] JhoonKim 2010-02-09 15136
83 GIT 사용법 (ProGIT) - 2.5. 원격 저장소의 사용 방법 [2] JhoonKim 2010-02-04 16060
82 GIT 사용법 (ProGIT) - 2.4. 작업의 취소 [1] JhoonKim 2010-02-03 15113
81 GIT 사용법 (ProGIT) - 2.3. 위탁 이력의 열람 file [1] JhoonKim 2010-02-03 13308
80 GIT 사용법 (ProGIT) - 2.2. GIT 저장소(Repository)에 기록 file [2] JhoonKim 2010-01-21 16033
79 GIT 사용법 (ProGIT) - 2.1. GIT 저장소(Repository)의 취득 JhoonKim 2010-01-20 18362
78 GIT 사용법 (ProGIT) - 1.5. 최초 GIT의 환경 설정 [3] JhoonKim 2010-01-13 16603
77 GIT 사용법 (ProGIT) - 1.4. GIT 설치 JhoonKim 2010-01-11 21208
76 GIT 사용법 (ProGIT) - 1.2. GIT 개발 역사 / 1.3. GIT 기본 ... file [3] JhoonKim 2010-01-10 14794
» GIT 사용법 (ProGIT) - 1.1. 버전 관리 시스템의 개념 file [6] JhoonKim 2010-01-07 19510
74 I.MX Multimedia and Applications Framework 기술자료 ... file [2] 장석원 2009-10-26 11059

사용자 로그인