이전 회사에서는 버전 관리 시스템으로 SVN을 사용했습니다.
여러 팀원이 하나의 프로젝트에 참여하려면 꼭 필요한 환경이죠.
작년에 대학 학생들과 얘기하다 GIT 이라는 것을 처음으로 알게 되었구요,
관심은 갖고 있다가 회사 그만두고 혼자 게임을 만들면서 드디어 써보게 되었습니다.
이전에도 찔끔찔끔 공부했었긴 하지만, 어제는 하루 날 잡아서 공부하기로 결심했습니다.
기왕에 하는거 전체적인 개념은 잘 알고 시작해야 삽질을 덜하지 싶어서요.
다행히 GIT에 대한 문서나 강좌가 워낙 많더군요. 덕분에 반나절정도 공부해서 작은 프로젝트에 적용하는 수준은 익힐 수 있었습니다. 물론 진행하면서 매뉴얼과 검색을 수시로 확인해야겠지만요. :)
강좌에 보면 SVN등 기존의 (중앙관리형) 버전 관리 시스템을 사용했던 경우에 오히려 GIT 사용시 혼란스러워 할 수 있다고 하더군요. 저도 그 범주에 속하는데요, 다행히 전체적인 개념을 먼저 공부하고 들어가서 조금은 나은 것 같네요.
장점
. 설치 및 환경 세팅이 무척 간단합니다. 대규모 프로젝트 세팅이 아닌 이상에는 고민할 여지가 전혀 없습니다.
개인 개발용으로 SVN 환경을 설정한 적이 있었는데 적어도 몇 시간 보통 반나절은 걸렸던 거 같습니다. (초보 입장에서)
. 빠릅니다.
Unity 개발중인 프로젝트를 저장소에 올렸다가, 다른 폴더에 통채로 받아서 해봤는데 정말 빠릅니다.
GIT이 분산형 환경이어서 로컬 환경에서의 속도는 최강이네요. SVN같은 경우 내부 네트워크로 물려있어도 속도가 떨어지기 마련입니니다.
. 사용이 매우 쉽고, 매뉴얼이 잘 되어 있습니다.
개인 사용자 수준에서는 비슷비슷한거 같지만 소스 관리 시스템을 운영하는 사람 입장에서는 기존 SVN보다 쉽고 강력하다는 것을 느낄 수 있었습니다.
SVN에서 브랜치 따고 합치는 개념은 아직도 잘 이해가 되지 않는데 반해, GIT에서의 작업은 확실히 이해가 되더군요. 그리고 실제 적용 경험담을 보면 이러한 버전 관리가 정말 강력하고 flexible하고 쉽고 게다가 빠르다는 평가가 많습니다. 기대되네요.
단점
. GUI, (Windows) 탐색창 기준의 편의성이 떨어짐
리눅스 작업쪽에서 나온 개발환경이라 그런지 주력 UI가 command 입력 방식입니다. 어떻게 보면 Dos 명령어와 같은 수준으로 작업하지요. (TortoiseGIT도 있는거 같긴 한데 써보진 않았습니다)
프로그래머들은 큰 어려움 없이 사용하겠지만, 그래픽 디자이너나 게임 기획자들은 교육이 필요하며 적응하는데 시간이 걸릴 것으로 예상됩니다.
. 구조와 개념 잡기가 어려움
SVN등 중앙관리형 시스템의 경우에도 초보자는 개념이 와닿지 않겠지만, GIT과 같은 분산형 시스템은 SVN보다 더 기술적인 구조로 되어 있습니다.
SVN 쓸 때에는 그래도 (원격) 저장소가 있고 내 디렉토리가 있고 1:1로 생각해서 파일을 덮어씌우는 수준으로 얼추 비슷하게 이해할 수 있었습니다. 하지만 GIT은 마치 DB와 같이 중간에 cache가 있어서 작업 이후 commit 하거나 transaction을 취소하는 등의 개념이 들어가 있습니다.
마지막으로 제가 개발하던 Unity project를 복사하고 GIT을 적용해 보았습니다.
1. Unity 에디터의 메뉴에서 Edit / Project Settings / Editor를 실행합니다.
Inspector 패널 Edit Settings에서 Version Control 항목의 Mode를 [Meta Files]로 선택합니다.
(참조 : http://booiljoung.blogspot.kr/2013/04/unity3d-git.html)
2. GIT bash를 실행합니다.
Windows 환경에서는 Git을 설치한 뒤 마우스 오른쪽 버튼을 클릭했을 때 GIT과 관련된 메뉴들이 생깁니다.
탐색창에서 프로젝트 폴더를 열고 마우스 오른쪽 버튼의 메뉴 중 Git bash를 실행하면 되겠습니다.
3. 프로젝트 폴더에서 git init을 실행합니다.
이미 있는 프로젝트를 추적할 때, 해당 디렉토리에서 git init을 합니다.
해당 디렉토리에 (숨겨진) .git 디렉토리가 생깁니다.
4. .gitignore 파일을 생성합니다.
관리 대상에서 제외할 파일들을 설정합니다.
이에 대한 내용은 개발자, 프로젝트별, GIT 버젼별로 조금씩 다릅니다.
(글 제일 아래에 제 프로젝트에서 사용하는 .gitignore를 소개합니다)
3. git add .
현재 디렉토리 전부를 stage에 올립니다.
4. git commit -m "메시지 입력"
스테이지에 올라온 파일들을 저장소에 올립니다. -m 옵션으로 메시지를 적을 수 있습니다.
이것으로 최초 GIT 개발 환경 세팅이 완료되었습니다.
(추가 : 다른 폴더에서 위 프로젝트를 받아오기)
5. 새로운 작업 폴더를 생성합니다.
6. 새로운 폴더에서 Git bash를 실행합니다.
7. git clone을 실행합니다.
git clone [저장소] 하면 되는데, 다른 이름으로 바꾸고 싶으면 git clone [저장소] [바꿀 이름] 으로 실행하면 됩니다.
저는 아래와 같이 입력하고 실행했습니다.
>git clone ../git_test/.git
Cloning into 'Git_test'...
done.
Checking out files: 100% (925/925), done.
제 .gitignore 파일의 내용은 아래와 같습니다.
(*, !, #등의 내용은 "git .ignore"로 구글 검색하시면 충분한 설명을 얻으실 수 있습니다)
Library/
Temp/
Obj/
Temp/
*.svd
*.apk
*.exe
!Library/*.asset
!Library/AssetImportState
!Library/AssetServerCacheV3
!Library/AssetVersioning.db
!Library/BuildPlayer.prefs
!Library/expandedItems
!Library/guidmapper
!Library/s!cripMapper
!Library/EditorUserBuildSettings.asset
!Library/EditorUserSettings.asset
!Library/metadata/
# OS and Shell generated
.Trashes
Thumbs.db
전 SVN이 편하더군요.......