본문 바로가기

Programming/Git

7. Git 기본 지식

이번포스팅은 Git 을 사용하기에 앞서, Git 의 기본 지식에 대해서 공부해 보는 시간을 가지고자 한다.

이 포스팅의 그림은 Pro Git 사이트에 있는 그림들을 가져왔음을 밝힌다.



Git 은 다른 버전 관리 툴들과는 달리, file 들의 변경이력을 snapshot 이라는 관점으로 관리를 한다.

예를 들어, CVS, Subversion 등은 변경이력을 변경된 정보를 저장하는 방식으로 변경 이력을 추적한다.





CVS Subversion 같은 툴들은 각각의 파일에 대해서 처음버전에 변경된 정보를 가진다.




Git 은 프로젝트가 시간에 지남에 따라 변경되는 것들을 Snapshot 이라는 관점으로 정보를 저장한다.



Git 을 가지고 프로젝트 버전관리를 하게 되면, 모든 작업을 자신의 PC 에서 할 수 있는 이득을 얻을 수 있다.

CVS Subversion 은 해당 Repository에 변경을 가하고 commit 을 하기 위해서는 반드시 Repository 를 저장하고 있는 중앙 서버에 접근을 할 수 있어야만 한다. 하지만, Git 은 그럴 필요가 없다. 이 이유는 이전 포스팅 Git 의 소개 란에서 자세히 설명한 바가 있다.



Git 시스템에서는 파일들의 check-sum 정보를 가지고 있기 때문의 파일들의 무결성을 보장할 수 있다. 파일의 내용이 아주 조금이라도 변경되더라도 이는 check-sum 에 바로 반영이 되기 때문이다. Git check-sum 을 계산하기 위해서, SHA-1 hash 알고리즘방식을 사용한다. 이렇게 SHA-1 hash 로 나온 check-sum 40개의 16 진수로 표현이 된다

(i.e. 1abdf3456a2234b1234599999000003245a0294)

Git 은 이렇게 파일의 이름이 아닌 자체 Database 에 이러한 check-sum 으로 참조할 수 있는 정보를 이용하여 버전관리를 한다.



Git 에서 버전관리를 위해서 Git 시스템은 3 가지 상태를 가진다.



1. commit 된 상태

2. 수정된 상태

3. stage 된 상태 



commit 된 상태는 정보가 안전하게 database 에 저장된 상태를 의미한다. 그래서 commit 이라함은 정보를 database 에 입력하는 것을 뜻한다. 수정된 상태는 파일을 수정하였지만, database 에 아직 commit 을 하지 않은 상태를 의미한다.

마지막으로 stage 된 상태는 현재버전의 수정된 파일을 다음 commit snapshot 에 넣겠다고 표시를 하는 것을 의미한다.



아래 그림은 Git 으로 관리되는 Project 의 세가지 중요한 부분들을 보여준다.







git directory Git 이 프로젝트를 위한 metadata database 를 저장하는 곳을 뜻한다.

이 디렉토리는 저장소를 clone (복제) 할 때 같이 복사되는 디렉토리이기도 하다.



working directory 는 프로젝트의 특정 버전을 checkout 한 하나의 작업공간을 의미한다. 그래서 개발자는 이 디렉토리에서 소스코드를 수정하기도하고 사용할 수도 있다.



staging area git directory 에 있는 단순한 하나의 파일인데, 이것은 다음 commit 에 대한 정보를 가지고 있다. 종종 이것은 index 라고도 불리운다.



기본적인 Git 작업 흐름도는 아래와 같다.



1. working directory 에 있는 파일들을 수정한다.

2. 수정한 파일들을 staging area 에 추가한다.

3. staging area 와 수정된 파일들을 commit 하여 Git directory 에 추가한다.



그래서 파일은 세 가지 상태를 가진다고 볼 수 있다.



1. committed, 2. modified 3. staged

'Programming > Git' 카테고리의 다른 글

9. github 계정설정  (0) 2011.07.03
8. github 소개  (0) 2011.07.03
6. Git Repository (저장소) 를 얻어오기  (0) 2011.07.03
5. Git 도움말 얻기  (0) 2011.07.03
4. Git 설정하기  (0) 2011.07.03