[git] subversion에서 git로 버전관리 갈아타기 Develop Tip

몇년 동안 버전관리 시스템으로 subversion을 사용하고 있었습니다.
리눅스 뿐만 아니라 tortoisesvn 이라는 프로그램으로 윈도우 시스템까지 지원을 하여 잘 사용하고 있었으나,
몇가지 단점이 있습니다.
가장 큰 단점은 버전관리 서버가 딱 한곳에 존재하여야 하며,
서버의 계정에 전적으로 의존한다는 것입니다.
하여간 전체적인 추세가 과거에 
RVS => CVS => Subversion => Git
이렇게 변화하고 있는 추세인 것이 사실입니다.
그래서 또 Git 에 적응해 보기로 마음 먹었습니다.

1) Git 설치
우분투에서는
$ sudo apt-get install git

맥에서는 
$ sudo port install git-core
(윈도우는 나중에 별도로 다루어 보겠습니다)

2) 글로벌 설정
초기에 한번 설정하는 내용입니다.

$ git config --global user.name "myName@h222"
$ git config --global user.email "mcchae@myemail"
위와 같은 식으로 지정해 줍니다.

바로 여기에서 SVN 과의 차이점이 나타나는데요,
같은 사용자라도 이 정보에 따라서 두 머신 (혹은 가상머신)에서 다른 사용자 이름이 나타날 수 있지요.

다음으로 파일이나 디렉터리를 버전과리에 추가해야하는데, 
그보다 우선 ignore 설정을 해 줍니다.

$ vi ~/.gitignore
*.o
*.obj
*.lo
*.la
*.al
.libs
*.so
*.so.[0-9]*
*.a
*.pyc
*.pyo
*.rej
*~
#*#
.#*
.*.swp
*.swp
*.old
*.bak
*.cache
*.tags
.DS_Store
Debug
Release
bin
obj
.svn
.git
.idea

위의 내용을 넣어 줍니다.

다음으로 글로벌 ignore 에 위의 파일을 지정해 줍니다.

$ git config --global core.excludesfile ~/.gitignore


3)특정 패키지 초기화
처음 특정 폴더에 있는 내용을 git 패키지로 초기화 시키는 방법입니다.
$ cd ~/myproj
myproj 에 있는 모든 내용을 git에 넣습니다.
$ git init
myproj를 초기화합니다.
(SVN은 모든 하위 디렉터리에도 .svn 이라는 버전관리 히든 폴더가 생기지만 git 는 top디렉터리에
.git 라는 폴더만 생깁니다. 나중에 이것만 모두 삭제하면 버전관리에서 제외됩니다.)

$ git add .
~/myproj 안에 있는 모든 내용 중, 위의 .gitignore 에 해당 되는 파일을 제외하고
추가를 합니다.

$ git commit -m 'initializing'
이제 추가한 것을 git에 commit 합니다.
(svn처럼 원격 서버에 commit 한다는 의미가 아니라 로컬의 .git 에 commit 한다는 의미입니다)

4) SVN 처럼 원격 서버에 초기화 한 git 저장소 만들어 옮기기
$ cd ~
$ git clone --bare ~/myproj ~/myproj.git
위의 명령은 3에서 로컬 저장소 (~/myproj/.git)에 저장된 내용만을 (--bare) 가져다가
~/myproj.git 저장소로 복사를 하라는 의미입니다.

이 상태에서 다른 서버의 위치에 SCP로 복사를 합니다.
$ scp -r ~/myproj.git user@remote.server:git
(로컬에 만든 myproj.git 저장소의 내용을 remote.server 서버의 user 사용자로 하여 
해당 사용자의 홈디렉토리 아래의 git 디렉터리 안으로 복사합니다)

5) 이제 어느 기계던 다음과 같이 저장소에서 가져오기
git-daemon을 이용하여 github처럼 가져올 수도 있으나
subversion 처럼 개인 저장소를 별도로 운영한다고 볼 때,
해당 서버와 SSH 로 연결한다고 가정합니다.
$ cd ~/work
$ git clone ssh://user@remote.server/home/user/git/myproj.git
이와 같이 하여 새로운 로컬 복사본을 갖게 되고 여기에서 작업을 합니다.

6) 실제 버전 관련 작업하기

6.1) svn status 대응
$ git status
svn에 비하여 보다 상세한 상태정보가 나옵니다.

6.2) svn add file
$ git add file

6.3) svn commit -m 'comment'
$ git commit -m 'comment'
명령 자체는 똑 같습니다.
대신 여기에서 큰 차이가 있는데, 바로
svn은 원격 중앙 서버에 수정된 사항이 바로 적용되면서 자동으로 revision 번호가 증가하는 반면,
git는 로컬 저장소 (clone 한 최상위 폴더 안에 있는 .git 디렉터리)에 커밋되는 것이 차이점 입니다.
svn 처럼 로컬에서 변경한 것을 clone 시켰던 원격 서버에 적용을 시키려면,
$ git push 
까지 해줘 한다는 차이점이 있습니다.

6.4) svn update
clone 시킨 곳에서 원격 서버에서 수정된 것을 가져오려면,
$ git pull
하면 됩니다.

7) 기타
3에서 git를 초기화 했던 것과 다른 서버에서 clone 을 했던 것을 비교하면 다른 것은 거의 없습니다.
대신, 로컬저장소 (~/.git/)에 있는 config 파일에
[remote "origin"]
    fetch = +refs/heads/-:refs/remotes/origin/-
    url = ssh://user@remoteserver/home/user/git/myproj.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
의 내용이 추가되었음을 알 수 있습니다.


핑백

  • 지훈현서 : [윈도우] Git 사용하기 2012-05-03 19:00:53 #

    ... 바로 이전 블로그에서 git 의 기본 맛보기를 해 보았습니다.그것은 우분투에서 명령으로 사용해본 git 였다면 이번에는 동일한 것을윈도우에서 진행해 보겠습니다. 우선 윈도우 ... more

  • 지훈현서 : [git] 출력시 한글 출력 문제 2016-08-23 12:18:30 #

    ... git 을 이용하여 버전관리를 하다가,(subversion에서 git으로 버전관리 바꿔타기 참고) 위와 같이 $ git status명령을 내리면 한글 나오는 부분이 \nnn 라고 나옵니다.(UTF8 이 octet 문자열 ... more

덧글

댓글 입력 영역

구글애드텍스트