Table of Contents

요즘 점차 많이 사용되고 있는 버전관리 시스템인 Git 의 사용법에 대해 설명한다.
리누스 토발즈가 만든 이 Tool 은 리눅스 커널 뿐 아니라, 점점 많은 오픈소스에서 사용되고 있다.
이러한 추세에 따라 별다른 설치 없이도, 리눅스 설치와 함께 자동으로 설치된다.
Git 에 대한 여러가지 기능과 사용법이 존재하지만 여기서는 가장 기본적이고 기초적인 그리고 가장 많이 사용되는 것들에 한해서 설명한다.

준비운동 하기

Git 를 이용하려면 몇 가지 정보가 필요하다. Git 에는 분산환경이라는 특성 때문에 사용자 이름과 이메일 주소를 제공하는 중앙 저장소가 없다. git config 명령어를 통해 이름과 이메일 주소를 설정한다.

#git config --global user.name "Woojong Kim"
#git config --global user.email "realizeadream81@gmail.com"

출력결과 값을 더 잘 보게 하기 위해서 다음과 같이 설정한다.

#git config --global color.ui "auto"

로컬에서 사용 시

저장소 생성하기

코드를 저장하고, 버전관리를 할 저장소를 만들어보자!
여기서는 /opt/nm 아래에 코드를 관리할 것이다.

#mkdir /opt/nm
#cd /opt/nm
#git init
Initialized empty Git repository in /opt/nm/.git/

해당 디렉토리 아래 .git 디렉토리가 생겼다.

변경하기

이제 빈 저장소에 파일을 추가해보겠다. networkmanager.c 파일을 생성하고 이를 추가해보겠다.

#touch networkmanager.c
#git add networkmanager.c
#git commit -m "add networkmanager.c file"              // -m 옵션으로 커밋로그를 작성한다
[master (root-commit) 5e9ec9b] add networkmanager.c file
 1 files changed, 6 insertions(+), 0 deletions(-)
 create mode 100644 networkmanager.c

커밋이 제대로 되었는지 확인해보자!

#git log
commit 5e9ec9b57a06d80c84eadf268a4c5aae251d6686
Author: Woojong Kim <realizeadream81@gmail.com>
Date:   Sun Nov 4 22:23:37 2012 +0900
 
    add networkmanager.c file

프로젝트를 이용한 작업 시작하기

추가한 파일을 아래와 같이 수정해보자!

#include <stdio.h>
 
int main()
{
    printf("Networkmanager main");
    return 0;
}

그리고 나서 현 상태를 확인해보자!

#git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   networkmanager.c
#
no changes added to commit (use "git add" and/or "git commit -a")

수정된 파일을 추가하자!

#git add networkmanager.c
#git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   networkmanager.c
#

이제 커밋 해보자!

#git commit -m "add printf in main()"
#git log
commit 7dede4762a131c3ec5d9be1d5a4a0ad99728726e
Author: Woojong Kim <realizeadream81@gmail.com>
Date:   Sun Nov 4 23:19:57 2012 +0900
 
    add printf in main()
 
commit 5e9ec9b57a06d80c84eadf268a4c5aae251d6686
Author: Woojong Kim <realizeadream81@gmail.com>
Date:   Sun Nov 4 22:23:37 2012 +0900
 
    add networkmanager.c file

그리고 로그를 보면, 앞서 본 입력한 것과 총 2개의 커밋 로그를 볼 수 있다.
여기서 혼동하지 말아야 할 것은 커밋을 하기 전에 수정된 파일을 add 명령어로 추가해주어야 한다는 것이다.

체크아웃 하기

저장소에 커밋한 파일을 새로운 디렉토리에 체크아웃해보자.
체크아웃할 디렉토리를 만들고, 아래와 같이 실행하여 체크아웃한다.

#mkdir /tmp/git
#cd /tmp/git
#git clone /ssd/git .

위에서 적어준 /ssd/git 는 저장소의 위치다.

원격에서 사용 시

앞서 설명한 방법의 경우, commit 은 가능하지만, push 는 불가능했다. 따라서 원격에서도 push 가능한 방법을 설명한다.

git 서버

먼저 git 서버에서의 설정은 아래와 같다.

#mkdir /git
#cd /git
#git init --bare 

git 클라이언트

클라이언트에서는 git 서버에 접속하여 코드를 check out 한다. 파일 생성 후, push 한다.

#git clone root@likewind.org:/git
#touch a b c
#git add *
#git commit -m "insert a b c"
#git push