GIT 를 사용합시다. 그전에 공부해야죠..

2011. 3. 7. 17:26OS/개발환경구축

참고할 사이트들은 굉장히 많다.
물론 영어로 제공되어지는 사이트,책 등이 대부분이고 한글로 설명을 해 놓은 경우가 그렇게 많은 편은 아닌것 같지만.. 요 몇일 동안 찾아본 내용들을 정리한다. (GIT 만 책 한권이더라 --;;)


앞으로 GIT를 사용할 예정이다.
우선 자주사용되는 용어부터 정리 한다.

0. 용어 정리

저장소 (Repository) : 작업자가 변경한 모든 내용을 추적하는 공간
작업 트리 (Working Tree) : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점이다.
체크 아웃 (Checkout) : 작업자의 작업트리를 저장소의 특정 시점과 일치 하도록 변경하는 작업
스테이징 영역 : 저장소에 커밋하기 전에 커밋을 준비하는 위치 (변경사항을 적용하기 전에 한번 더 변경사항을 정리하고 다듬을수 있는 기회를 제공한다. 변경사항을 추가하기 위해서는 git add 를 사용한다. 커밋 예정인 변경사항이 있다고 보면 된다.)
브렌치(branch) : 브랜치라는 것은 하나의 개발 라인을 의미 한다.
한개의 프로젝트에서도 여러개의 개발 라인이 존재 할 수 있다. 가장 기본이 되는 master branch에서 버그 수정이나 특정 기능을 추가하기 위해서 개발라인을 따로 두고 작업할 수 있다.
이러한 브랜치에는 HEAD(branch head)라는 것이 있는데 이는 한개의 브랜치 내에서 가장 최근에 커밋이 된 reference이다. 예를 들면 branch apple에 3개의 commit이 있는데 이중에 가장 최근에 추가된 커밋이 HEAD가 된다.
 -  master : master 브랜치는 복사해온 저장소 내의 HEAD의 복사본이다.
 - origin : origin 은 단지 git가 복사해 온 저장소를 가리키기 위해 기본적으로 사용하는 이름




1. 간단한 GIT의 개요.

GIT는 리눅스 커널 개발에 사용하기 위해 리누스 토발츠가 처음 디자인과 개발을 하기 시작했다.
GIT는 분산 버전 관리 시스템이다.
가장 큰 장점인 수정 내용을 매번 마스터 저장소에 커밋해서 올리는 대신에 저장소 전체의 로컬 복사본을 사용한다는 것이다.
GIT를 사용하면 각 개발자가 작업을 진행할 수 있는 자신만의 샌드박스를 가지고 있으며,
작업을 마친후에 변경내역을 마스터 저장소에 PUSH 할 수 있다.
GIT는 프로젝트 정보를 저장하기 위해 하나의 디렉터리(.git 폴더)를 사용하도록 단순화 되어 있다.
이 방법은 파일의 내역을 깨지 않은 채로 파일을 이동할 때 큰 장점이 된다.





2. GIT에 대한 기본 이해

GIT의 commit 은 Local Repository에 저장되는 것을 의미 에서만 이루어지고,
Remote repository에 저장은 push라는 동작으로 이루어 진다.
GIT에서는 내부 인덱스를 사용하여 저장소에 있는 파일 및 디렉토리의 상태를 추적한다.
또한 이러한 파일 및 디렉토리에 대한 변경 사항이 반영된 오브젝트가 저장되어 있으므로 후속 업데이트를 간편하게 수행할 수 있다.
GIT의 인덱스 및 오브젝트는 로컬 저장소에 있는 실제 파일 및 디렉토리와는 다른 종류의 모델이다.
즉 이 모델은 로컬에서만 변경되고 로컬 저장소나 원격 중앙 저장소에는 아직 커밋되지 않는 파일과 디렉토리를 쉽게 식별할수 있는
기능을 제공한다. GIT 명령 중 일부는 인덱스에 대해 실행되지만 다른 명령은 실제 파일 및 디렉토리 컨텐츠에 대해 실행되므로 잘못된 설명을
사용하면 파일이 업데이트 되지 않은 이유를 몰라서 혼란스러울 수 있다.
(위의 내용중에 볼드 처리된 내용만 이해하면 된다. ㅎㅎㅎㅎ )





3. 한번 해보자 .
아래 다운로드 부터 받아서 진행 해보자. 설치에 대해서는 크게 어려운것 없다.
공식 사이트 :http://git-scm.com/ ==>  http://code.google.com/p/msysgit/

3-0) 초기 세팅

git config --global user.name seunghyun kim 
==> 작업자 이름 설정
git config --global user.email kimseunghyun76@test.com  ==> 작업자 이메일 설정
git config --global --list  ==> 설정값 확인

3-1) 혼자서 작업 할땐...
콘솔 창에서 아래 프로세스 대로 입력을 해보도록 하십니다.

git init test  ==>test 폴더에 저장소를 생성하는 명령어
cd test    ==> 해당 폴더로 이동해서

( 폴더 내에 test.h 를 만드세요 )
git add .  ==>모두 더해 줍니다.
git status   ==> 현재 상태 보기 (이건 중간중간 확인 해보면 좋죠)
git commit -m "commit message"    ==>로컬 저장소에 저장한다는 뜻이죠 (멘트도 저장)
git log -5  ==> 커밋 로그를 확인한다.(숫자 5는 지금까지 커밋한 5번에 대한 로그 개수를 볼때..)

git remote add origin <원격 저장소 URL> ==>원격 저장소를 연결(origin은 git이 가져온 저장소를 가르키는 것으로 보면 됨.)
git push origin master   ==>원격 저장소에 로컬 저장소에 있는거 집어 넣기.
==> master는 git 에서의 master branch 를 말한다. 저장소를 복사해 올 때 해당하는 저장소의 HEAD 카피본이다.

3-2) 여러명이서 작업 할 때.

git clone 를 사용하면 저장소 소스코드를 그대로 checkout 받을 수 있다.
여기서 SVN와의 차이점은 git 은 저장소가 local에도 있기 때문에 원격 중앙 저장소의 소스 코드를 체크아웃 받을 수도 있지만,
위와 같이 작업한 로컬의 저장소의 소스코드를 체크아웃 받을수 있다.
일단 여기서는 원격 중앙 저장소를 이용한다는 가정을 하고,

git clone <원격 저장소 URL> test ==> 원격 저장소 복제.. test 폴더에

( 폴더 내에 test.h 를 만드세요 )
git add .  ==>모두 더해 줍니다.
git status   ==> 현재 상태 보기 (이건 중간중간 확인 해보면 좋죠)
git commit -m "commit message"    ==>로컬 저장소에 저장한다는 뜻이죠 (멘트도 저장)
git log -5  ==> 커밋 로그를 확인한다.(숫자 5는 지금까지 커밋한 5번에 대한 로그 개수를 볼때..)

git push  ==>원격 저장소에 로컬 저장소에 있는거 집어 넣기.
git pull origin master ==> 다른사람이 작업한것을 받아오는 작업이다.




고 :
kevinSuttle's git Bookmarks  : http://www.delicious.com/kevinSuttle/git
the fast version control system : http://git-scm.com/documentation
 ==> 책(PRO GIT)  : http://progit.org/book/

한글 참고
GIT 사용자 설명서 : http://namhyung.springnote.com/pages/3132772
PRO GIT 번역 : http://blog.naver.com/david_shkim?Redirect=Log&logNo=50106234542


GITHub는 코드 저장소일 뿐만 아니라, 개발자 간의 소셜 네트워크 역활을 한다고 하니.. 아래 블로그 글을 참고하면 도움이 될까??  ㅎㅎ
(GITHub에 대해 참고할 URL : http://channy.creation.net/blog/626 )


오늘은 여기까지..