분산형 버젼 컨트롤 시스템을 사용해 보자!
서브버젼(Subversion)을 쓰던 사용자라면 어렵지 않게 사용할 수 있다.
이번 포스팅에서는 Git가 무엇인지 간단한 소개와 Git를 설치하는 법, 로컬에서 커밋하고 로그 확인하는 방법등을 간단하게 살펴볼 것이다.
Git를 아직 들어본 적이 없다면, 오픈소스와 별로 친근하지 않다고 할 수 있다. Git는 분산형 버젼 컨트롤 시스템(Distributed VCS)으로 2005년 리누스 토발즈에 의해 개발되어 Linux Kernel 프로젝트를 포함하여 Perl, RoR(Ruby on Rails), WINE 등에서 사용하고 있다. 이렇게 유명한 프로젝트에서 이용되고 있다는 것은 그 실용성과 성능이 이미 검증되었다고 해도 될 것이다.
서브버젼과 같은 중앙 집중형 버젼 컨트롤 시스템에 비해 무조건 좋다는 것은 아니지만, Jenix의 개인적인 생각으로는 “훨씬 좋다”라고 생각을 한다. 도대체 서브버젼에 비해서 그럼 뭐가 좋은 것이냐고 묻는다면, 한 가지만은 0.1초안에 대답할 수 있다. “훨씬, 훨씬, 훨씬, 훨씬 서브버젼보다 빠르다!” 라고.
Git에 대해서는 여러 가지 내용을 다룰 예정이므로 다른 장점들에 대해선 해당 내용을 포스팅하면서 또 소개할 것이다. 아직 사용해보지 않았다면 일단 사용해보도록 하자! 특히나 따로 저장소 서버가 없는 개인 개발자라면 서브버젼보다 Git가 훨씬 편리할 것이다.
자, 시스템에 Git를 설치하도록 하자. Git 를 맥에 설치하는 방법엔 3가지가 있다.
- Git 인스톨러 패키지 이용하기 - http://code.google.com/p/git-osx-installer/
- MacPorts, Fink 를 이용하여 패키지 관리 시스템을 통해 설치하기
- 직접 소스 코드를 받아서 설치하기 - http://dysinger.net/2007/12/30/installing-git-on-mac-os-x-105-leopard/
번호 순서대로 추천하는 순서이다. 기존에 패키지 관리 시스템을 이용 중이었다면 해당 시스템을 이용하는게 편할 것이고 그렇지 않다면 1번 - Git 인스톨러 패키지를 이용해서 설치한다. 일반적인 맥 애플리케이션 설치와 마찬가지로 Next 를 누르다보면 설치가 완료될 것이다.
완료가 되면 터미널을 실행하고 git 라고 타이핑 해본다.
-
WonderGirls:~ jenix$ git
-
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]
-
-
The most commonly used git commands are:
-
add Add file contents to the index
-
bisect Find the change that introduced a bug by binary search
-
…
위와 같이 실행이 된다면 잘 설치가 된 것이다.
레포지터리는 어떻게 추가하면 될까? 보통 서브버젼의 경우는 레포지터리 디렉터리를 따로 만들어서 초기화를 하고 해당 경로로 접근하여 파일들을 추가하고 할 것이다. 하지만 Git는 그럴 필요가 없다. 분산형 버젼 컨트롤 시스템의 특징인데, 레포지터리 전체를 로컬에 저장하기 때문에 현재 프로젝트 디렉터리에 Git를 바로 초기화하면 그게 끝이다. 프로젝트 디렉터리가 TestApp 이라고 해보자. TestApp 안에는 Hello, Mac! 을 한 줄 출력하는 main.c 파일 하나가 있다. 이를 초기화하고 추가하자.
-
WonderGirls:TestApp jenix$ ls
-
main.c
-
WonderGirls:TestApp jenix$ git init
-
Initialized empty Git repository in /tmp/TestApp/.git/
-
WonderGirls:TestApp jenix$ git add .
-
WonderGirls:TestApp jenix$ git commit
-
Created initial commit bf8a69d: Initial Commit
-
1 files changed, 8 insertions(+), 0 deletions(-)
-
create mode 100644 main.c
-
WonderGirls:TestApp jenix$
git init 커맨드를 이용하여 현재 프로젝트 디렉터리를 git 로 초기화하고, 현재 프로젝트의 내용들을 add 하고, commit 을 하면 된다. 끝이다. 로그를 한번 봐보면,
-
WonderGirls:TestApp jenix$ git log
-
-
commit bf8a69da2b424e533b75f98eadef6f6bfebe2647
-
Author: Park <jenix@WonderGirls.local>
-
Date: Sun Feb 1 13:37:18 2009 +0900
-
-
Initial Commit
-
WonderGirls:TestApp jenix$
위와 같이 로그가 나온다. Hello, Mac! 이 아니라 Hello, Apple! 로 변경하고 다시 커밋을 해보자. 파일을 수정한 뒤 이번엔 git commit -a 명령어를 바로 사용해 보자. -a 는 git add 커맨드를 대신 하는 것인데, Git는 서브버젼과 다르게 변경된 사항에 대한 메타데이터를 저장하는 것이 아니라 각각 리비젼의 모든 파일을 가지고 있는다. 따라서 파일이 변경되면 해당 파일을 다시 Git 레포지터리에 추가하고 커밋을 해야하는데, 이를 -a 옵션을 이용하면 한 줄로 가능하게 된다. 커밋이 잘 되었다면 다시 로그를 확인해 보자. 아래와 비슷하게 될 것이다.
-
WonderGirls:TestApp jenix$ git commit -a
-
Created commit 6e64ee0: Second Commit
-
1 files changed, 1 insertions(+), 1 deletions(-)
-
WonderGirls:TestApp jenix$ git log
-
commit 6e64ee0d206451637107921520b05237f43df4d2
-
Author: Park <jenix@WonderGirls.local>
-
Date: Sun Feb 1 13:40:37 2009 +0900
-
-
Second Commit
-
-
commit bf8a69da2b424e533b75f98eadef6f6bfebe2647
-
Author: Park <jenix@WonderGirls.local>
-
Date: Sun Feb 1 13:37:18 2009 +0900
-
-
Initial Commit
-
WonderGirls:TestApp jenix$
자, 두번째 커밋이 되었다. 처음과 두번째 커밋의 diff 를 사용해 보자. 현재 리비젼과 비교를 하려면 git diff 뒤에 비교하고 싶은 리비젼만 입력하면 된다. 처음 커밋은 bf8a69da2b424e533b75f98eadef6f6bfebe2647 이므로 git diff bf8a69da2b424e533b75f98eadef6f6bfebe2647 라고 입력하면 될 것이다.
-
WonderGirls:TestApp jenix$ git diff bf8a69da2b424e533b75f98eadef6f6bfebe2647
-
diff –git a/main.c b/main.c
-
index bf25a95..2ee2c93 100644
-
— a/main.c
-
+++ b/main.c
-
@@ -2,7 +2,7 @@
-
-
int main (void)
-
{
-
- printf("Hello, Mac!\n");
-
+ printf("Hello, Apple!\n");
-
-
return 0;
-
}
-
WonderGirls:TestApp jenix$
자, 일단 여기까지만 해도 개인적인 프로젝트 관리를 하는데는 큰 어렴움이 없을 것이다.
작은 프로젝트들은 Git로 옮겨서 익숙해지도록 하자. Git는 강좌 스크린캐스트도 제공하는데 사용하는데 참고하길 바란다. 다음번 기사에선 태깅 / 브랜치 / 머지 등 실제 프로젝트에 대한 작업흐름에 대해 이야기해 보겠다.
추천 Git 스크린캐스트 - http://www.gitcasts.com/

.png)

Leave a Reply