메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

Git 입문하기

한빛미디어

|

2010-04-23

|

by HANBIT

26,451

제공 : 한빛 네트워크
저자 : 제시 프리먼(Jesse Freeman)
역자 : 이호민
원문 : Intro To Git

Advanced Flash Tactics 또는 AFT(역자주: Advanced Flash Tactics-필자는 오라일리에 짧은 플래시 관련 기사들을 AFT라는 태그로 작성하고 있다.)는 Flash Art Of War(역자주: 플래시 개발에 관한 필자의 블로그)의 깊은 곳에서 꺼낸 기술이다. 이번 AFT로 살펴볼 것은 "Git 입문"이다. 어디서나 플래시 개발자들이 구글 코드(Google Code)를 버리고 저 푸른 GitHub의 초원으로 이주해 가는 것을 볼 수 있다. 지금으로 부터 얼마전에 Git는 그저 버전 관리 도구로 내 시야에 들어왔다 하지만 GitHub가 제공해 주는 멋진 기능들 때문에 결국 Git으로 전환하게 되었고 완전히 정착하게 되었다. 이제, Git를 시작하기 위한 팁들과, 어떻게 github를 사용해야 하는지, 그리고 내가 Git로 전환하기를 권하는 이유를 말 해 보겠다.

그림 Git가 무엇인가?

Git는 자유 소프트웨어이며 빠른 속도가 강점인 분산 리비전 관리 또는 소프트웨어 소스 관리 프로젝트이다. Git는 리눅스 커널 개발에 사용하기 위해 리누스 토발츠가 처음 디자인과 개발을 하기 시작했다. 모든 Git 워킹 디렉터리는 완벽하게 독립적인 저장소로 전체 변경 내역과 모든 리비전 트래킹 능력을 갖추고 있으며, 네트워크 접근이나 중앙 서버에 의존적이지 않다. - 위키백과

SVN 대비 장점

Git 는 분산 버전 관리 시스템이다. 기반 코드를 체크아웃하고 변경내용을 커밋하여 돌려주는 여러 방법이 존재한다. 이런 방법의 주요 장점은 여러분의 수정 내용을 매번 마스터 저장소에 커밋해서 올리는 대신 저장소 전체의 로컬 복사본을 사용한다는 것이다. 전통적인 SVN 설정에서는 버전 관리를 하기 위해서는 여러분의 작성한 코드를 반드시 커밋해야 하고, 이 수정 내용이 다른 사람의 작업을 깨트리거나 문제를 일으키기도 한다. Git을 사용하면 각 개발자가 작업을 진행할 수 있는 자신만의 샌드박스를 가지고 있으며, 작업을 마친 뒤에 변경내역을 -마스터 저장소에- 올려 보낼 수(push) 있다.

Git은 프로젝트 정보를 저장하기 위해 하나의 디렉터리를 사용한다. SVN은 모든 디렉터리에 .svn 폴더를 가지고 있어야 하는 반면, Git은 체크아웃 한 루트 디렉터리에 하나의 .git 폴더를 사용하도록 단순화 하였다. 이런 방법은 파일의 내역을 깨지 않은 채로 파일을 이동할 때 큰 장점이 된다. 게다가 Git는 파일을 프로젝트 폴더 안에 어디에 있는지가 아니라 파일의 내용을 분석하는 구분할 만큼 똑똑하기 때문에 이름을 바꾸거나 위치를 이동하는 것으로 파일 내역이 깨지는 일이 없다.

브랜치가 가볍게 만들게 만들어 진다. SVN의 경우 Trunk(주 작업 공간)와 Branch들이 있고 각 브랜치가 소스의 복사본인 것과 달리 Git에서는 모든 것이 브랜치다. Git에서는 새 브랜치가 아주 빠르게 만들어 지며 브랜치 간의 이동도 빠르게 수행된다. Tag를 만드는 것도 놀라울 정도로 쉽다.

Git 은 실제로 SVN 저장소와 함께 운용할 수 있다. Git에는 커밋들을 SVN 저장소로 재 동기(re-sync) 하는 기능이 있고, Git의 속도와 기능들을 사용하고 싶지만 SVN을 사용할 수밖에 없는 환경에 있는 사람들은 이 기능을 사용할 수 있다. 나는 이 기능을 사용하고 있지 않지만 정말로 매끄럽고, 기대한 대로 동작한다고 읽고/들었다. (옮긴이 주: git-svn 이라는 패키지로 검색해 보면 이 기능의 사용법을 찾을 수 있다. 역자의 경우 git-svn을 매우 만족스럽게 매일 사용한다.)

단점

Git는 SVN이나 CVS을 미리 사용해 보지 않았다면 익히기가 쉽지 않다. 복잡한 명령어들의 단축어가 그다지 많지 않으며, revert처럼 SVN에도 같은 이름이 있는 명령어가 Git에서는 다른 동작 행하기도 한다.

Git는 폭넓게 지원되지 않는다. 명령어를 타이핑 하는걸 무서워하는 사람들을 위해 SVN에 있는 것 같은 간단하게 다룰 수 있는 GUI가 Git에는 거의 없다.

Github가 멋진 이유

Github는 코드 저장소일 뿐만 아니라 개발자들 간의 소셜 네트워크 역할을 한다. 나는 생각했던 것만큼 커뮤니티에서 이득을 얻지 못하고 있지만 Github로 만들어진 커뮤니티는 대단하다. 커뮤니티에서는 관심이 가는 개발자를 팔로(follow)할 수 있을 뿐 아니라, 그들의 코드를 포크 (복사한 원본으로의 연결을 간직한 여러분 소유의 브랜치)를 하고 프로젝트에 공헌을 할 수도 있다. 코드베이스(codebase)의 소유자는 여러분이 변경한 내용을 보고 메인 프로젝트에 머지할 수 있다. 또는 여러분만의 독자적인 방향을 잡아 나가는 것도 가능하다.

Github에서는 여러분의 코드에 관심을 가지는 사람들이 다양한 방법으로 코드를 받아 갈 수 있다. 프로젝트를 그들의 로컬 컴퓨터에 클론(clone)할 수도 있고 download를 클릭하여 git 디렉터리를 제외한 프로젝트의 압축파일을 받을 수도 있다. 이 기능은 git를 배우고 싶지 않은 초보자들도 프로젝트의 소스를 받아갈 수 있으며, 프로젝트를 직접 압축해서 올리지 않아도 되기 때문에 기존의 저장소들에 대비해 장점이 된다.

Git 커닝 페이퍼

다음은 내가 매일 기본적으로 사용하는 git 명령어들이다.
  • git init - git 저장소(repo) 만들기
  • git pull - 저장소에서 변경 내용 끌어오기
  • git push - 커밋들을 마스터 저장소에 밀어 넣기. 나는 메인 프로젝트에 밀어 넣기 위해 push origin master를 사용하거나, 태그를 포함해서 모두 밀어넣는 용도로 push --all 를 사용하곤 한다.
  • git tag [TAG NAME] - 여러분의 저장소에 태그를 붙인다. 어떤 태그들이 있는지 보려면 간단히 git tag 를 입력하여 태그 목록을 볼 수 있다.
  • git branch [BRANCH NAME] - 브랜치는 태그와 비슷하다. [BRANCH NAME]을 생략하면 브랜치들의 목록을 볼 수 있고 앞에 * 이 붙은 것이 현재 사용 중인 브랜치다.
  • git checkout [BRANCH NAME] - 다른 브랜치로 이동한다.
  • gitk --ll - 이 명령은 히스토리가 그렇게 많지 않은 저장소에서만 사용하라. 이 명령어는 저장소의 모든 코맨트들과 각 브랜치/태그들을 그림으로 보여주는 도구를 실행한다. 무언가 꼬인 경우나 실수를 고치기 위해 예전으로 되돌아 가야하는 경우 매우 큰 도움이 된다.
Git 자료

케빈 서틀(Kevin Suttle)은 여기여기에 매우 훌륭한 Git 자료들을 모아 두었다. 아래의 목록에는 필자가 생각하기에 꼭 읽어야 할 것들을 몇 개 나열했다. 마치면서…….

Git를 배우는 진입 장벽만 극복하면 Git 은 놀라운 버전 관리 도구로, 여러분에게 사용해 보길 강력하게 권한다. 여전히 Git를 배우고 있는 중이지만, 나는 사람들의 Git에 대한 질문에 답변을 -할 수 있으면- 다는 것을 즐기고 있다. 이제 나의 플래시 작업흐름에 Git를 적용한 방법에 대한 질문들에는 어느 정도 자유롭게 답변을 할 수 있다. 주저 말고 다른 사람들이 Git를 시작할 수 있도록 조언이나, 링크, 팁들을 남겨 주기 바란다.
TAG :
댓글 입력
자료실

최근 본 상품0