요즘 점차 많이 사용되고 있는 버전관리 시스템인 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 서버에서의 설정은 아래와 같다.
#mkdir /git #cd /git #git init --bare
클라이언트에서는 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