GIT 과 SVN 을 이해하려면 먼저 형상관리(버전관리)에 대해 이해해야 한다.
프로젝트를 진행할 때 각자 업무를 나눠서 맡은 부분을 개발을 하게 되는데,
각자가 개발한 코드 혹은 문서들을 하나의 관리 도구에서 통합적으로, 버전별로 관리하게 되는 것을
형상관리(Configuration Management) 혹은 버전관리(Version Management)라고 부른다.
형상관리, 버전관리, 변경관리 등 용어는 다양하지만
실무에서 사용하는 의미는 거의 비슷하기 때문에 구분하지 않고 사용하는 경우가 많다.
형상관리 방식에는 크게 중앙집중식과 분산관리식 으로 나뉘는데
대표적으로 사용되는 도구가
중앙집중관리식의 SVN 그리고 분산관리식의 GIT 이다.
SVN 은 내 로컬PC 에서 Commit을 하면 바로 중앙저장소에 반영이 되는 반면
GIT 은 내 로컬PC에서 Commit을 하면 로컬 저장소에 반영이 되고 로컬저장소에서 Push를 하면
원격저장소에 반영이 된다.
SVN의 최대의 장점은 직관적이다.
모든 사람이 중앙서버에 있는 같은 자료를 받아오고
내가 Commit을 하는 순간 모든 사람에게 공유가 된다.
이러한 방식의 단점은 만약 두 사람이 하나의 파일을 동시에 수정하고 커밋하였을 때
충돌이 일어날 확률이 높다는 얘기이다.
반면 GIT은 직관적이지 못하고 적응하는데에 시간이 필요하다.
내가 한 작업물을 원격저장소에 올리려면
우선 로컬PC 에서 작업내용을 Commit 하여 로컬 저장소에 반영한 후,
원격저장소에서 fetch로 로컬저장소로 마스터 파일을 받아와서
충돌이 나지 않게 merge를 이용하여 합친 다음,
로컬 저장소의 내용을 Push 하여 원격저장소에 올리면 그때 다른 사람들에게 나의 작업 내용이 공유가 된다.
그러나 GIT 의 장점은
모든 작업이 로컬에서 이루어지고 네트워크 사용은 원격 저장소로 저장할 때 한 번 이루어지므로
개발 시 처리속도가 빠르고,
웹 상에 저장소를 둘 수 있기 때문에
언제 어디서나 협업을 할 수 있고(이건 단점일수도…),
여러 사람이 가지가 뻗어나가듯 자신의 작업을 하기 때문에 이를 브랜치 라고 하는데,
브랜치와 머지의 상호작용을 잘 할 수 있도록 편의성을 잘 제공해주기 때문에 협업이 더욱 더 용이해진다.
그리고 원격저장소의 내용이 모든 협업자들의 로컬 저장소에 저장이 되어 있으므로
중앙저장소에 에러가 생기면 모든 작업이 마비되는 SVN 과 다르게
원격저장소에 에러가 생겨도 로컬에서 복구하기 용이하고,
히스토리 관리가 잘 제공되어 있어 히스토리 관리가 용이하다.