개요
요즘에야 다들 대학생분들도 git과 github를 자연스럽게 사용하지만, 나는 부끄럽지만 학창 시절에 버전별로 압축해서 usb에 백업하고 개발했었다.
실무에서, 내가 처음 사용한 버전 관리 시스템은 CVS다.
툴도 불편했지만, 수동으로 파일 백업하던 시기보다 장점이 많았다.
그 다음으로 쓰게 된 버전 관리 시스템이 svn이다. 아직도 많이 선택되고 있는 간편하고, 직관적인 버전관리 시스템이다.
아직도 게임 개발팀에선 svn을 사용하는 경우가 비일비재 하다. 이는 몇가지 이유가 있다.
- svn보다 git이 상대적으로 학습 코스트가 든다는 점, 게임 개발이 훨씬 더 많은 코드를 생산해낸다는 점,
- 태그, 브랜치를 적극적으로 쓰지 않는다는 점.
- 머지를 크게 크게 하고, 태그, 브랜치 갯수를 적게 유지하려 한다.
- 어찌보면 svn에 개발 문화를 맞춘 느낌도 있다.
- 머지를 크게 크게 하고, 태그, 브랜치 갯수를 적게 유지하려 한다.
- 폴더별로 check out / commit / update 하고 싶다.
- local change를 다양하게 유지해서, 하나의 check out에서 다양한 작업을 동시에 하고 싶다.
- 익숙하다.
애초에 git과 svn의 치명적인 차이점은 다음과 같다.
git은 각기 다른 저장소를 보유하고 있으며, 협력을 통해 각 rebase/merge 등의 액션을 통해 이를 조절해줘야 한다.
또한 충돌처리 과정이 상대적으로 까다롭기도 하다.
이 그림을 보면 조금 더 잘 이해가 되실텐데, 모든 작업을 원격에서 하는 것과 로컬에서 하는 것이 가장 큰 차이라고 볼 수 있다.
여기서 계속 논란이 되는 것은 충돌 발생의 기준과, 충돌 해결에 대한 과정이 확실히 git이 더 어렵다.
커밋만 해두면 모든 데이터가 살아 있을 수 있다지만, 비 프로그래머 직군의 사용법을 본다면 사실 Commit은 무거운 행위이자 위험한 행동으로 간주하고, local changes를 유지한채 각종 액션을 시도하는 습관을 쉽게 바꾸지 못했다.
1
왜 그런 간단한 습관도 못바꿔요?
라고 치부하기엔 git의 학습 코스트가 높고 비직관적이기 때문이라고도 말할 수 있겠다.
git은 모두가 같은 상태에 놓이는 것을 지향하는데, svn은 그렇지 않고, 사용자 다수가 그런 환경에 익숙하지 않다면 이는 자연스레 오류 발생률의 증가로 이어지는 것이기 때문이다.
물론 적응 한 뒤에는 로컬 저장소에 대한 장점이 커질 수 있으나, 이를 활용하기 보다 단점이 더 두드러지는 현상이 벌어진거라고도 볼 수 있겠다.
다시한번 강조하자면 git의 장점은 로컬 저장소 개념과 브랜치의 적극 활용에 있다. svn의 장점은 직관성이다.
사실 게임 개발에서는 비 프로그래머 직군이 많기 때문에, 이런 상대적 비직관성은 큰 단점이 되는 경우가 많다.
특히, 왜 local changes를 두지 않아야 하는지, 적절한 .gitignore
와 같은 파일을 만들고 관리해줘야 하는지를 납득시키기가 쉽지 않다.
이에 대한 학습 코스트를 들이고 노력하는 것이 합리적이지 않은 측면도 분명히 있다.
마치며
이러한 이유들로 게임 개발에서는 svn이 여전히 git보다 많이, 자주 사용된다.
개인적인 결론은 git+svn이 맞지 않나 싶은 생각이 있다. 리소스 관리 측면에서 보았을때는 확실히 svn이 메리트가 있는 만큼 리소스는 svn, 코드는 git이 맞지 않을까?