개요
Git과 SVN의 차이에 대한 내용을 학습하고 학습한 내용을 정리해보았습니다.
Git / SVN 개념
Git과 SVN은 형상관리(Version Control System) 툴이라고도 한다.
형상관리 툴은 아래와 같은 특징을 가지고 있다.
- 소프트웨어 버전 관리 툴이라고도 한다.
- 형상관리는 소스의 변화를 끊임없이 관리하는 것을 말한다.
- 소스를 버전 별로 관리할 수 있어서 개발 시 소스코드를 수정하기 이전으로 돌아가야하는 경우 유용하다,.
- 팀 프로젝트에서 누가 무엇을 어떻게 추가하고 수정하였는지 알 수 있기 때문에 코드를 병합하거나 수정된 소스를 추적하는데에도 쓰인다.
SVN
2000년에 CVS를 대체하기 위해 만들어졌으며 현재까지도(최근에는 모두 Git으로 변경하는 추세😂) 종종 사용되는 형상관리 툴이다.
소스의 저장소를 서버로 두고 작업하는 PC를 클라이언트로 연결하여 소프트웨어 개발 시 소스의 수정과 변경사항을 관리할 수 있는 도구입니다.
작업 내역을 commit시 소스 변경 사항과 히스토리가 즉시 서버로 전송되고 저장되다 보니 관리가 용이하여 과거의 수정 내역과 히스토리 파악이 매우 용이해집니다.
간단한 용어 설명으로 아래 내용이 있다.
- trunk : 프로젝트에서 가장 중심이 되는 디렉토리
- branches : trunk에서 뻗어져 나온 나뭇가지를 뜻함. 프로젝트 내의 작은 프로젝트로 생각할 수 있음
- tags : 버전 별로 소스코드를 따로 관리하는 공간(버전 별로 태그를 붙여서 tag 디렉토리 안에 보관)
SVN은 아래와 같은 특징이 있다.
- SVN은 대부분의 기능을 완성하고 소스를 중앙 저장소에 commit한다.
- SVN에서 commit은 중앙 저장소에 해당 기능을 반영한다는 의미이다.
- 개발자가 자신만의 version history를 가질 수 없다.
- Local History를 이용하긴 하지만 일시적인 내역만 확인이 가능
- commit한 내용에 실수가 있을 경우에는 다른 개발자에게 바로 영향을 미칠 수 있다.
Git
소프트웨어를 개발하는 기업의 핵심 자산인 소스코드를 효과적으로 관리할 수 있게 해주는 무료/공개 소프트웨어이다. 또한 매우 빠른 속도의 분산형 저장소이다.
Git은 작업을 진행하는 로컬 자체가 서버가 될 수도 있고, 클라이언트가 될 수 있으며 브랜치와 태그를 프로그래머 마음대로 로컬에서 커밋과 관리가 가능하다.
Git은 아래와 같은 특징이 있다.
- Git은 개발자가 자신만의 commit history를 가질 수 있고, 개발자와 서버의 저장소는 독립적으로 관리가 가능하다.
- commit한 내용에 실수가 있더라도 바로 서버에 영향을 미치지 않는다.
- 개발자는 자유롭게 commit을 하다가 원하는 시점에 서버에 변경 내역(commit history)를 반영(push)할 수 있으며, 서버의 통합 관리자는 관리자가 원하는 순간에 각 개발자의 commit history를 가져올 수 있다.
git은 서버 저장소와 개발자 저장소가 독립적으로 commit history를 가져갈 수 있기 때문에 매우 유연한 방식으로 소스를 운영할 수 있다.
Git과 SVN의 차이점
Git과 SVN의 차이를 비교해보면 아래와 같다.
- Git이 SVN과 다른 점은 분산형 관리 시스템이다.
- SVN이 중앙 서버에 소스코드와 히스토리를 저장하는 것과 달리 Git은 소스코드를 여러 개발 PC와 저장소에 분산해서 저장한다.
- 위 특징으로 중앙 서버에 장애가 있더라도 로컬 저장소에 커밋을 할 수 있으며, 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능하다.
- 사본을 로컬에서 관리하기 때문에 Git이 SVN에 비해 훨씬 빠르다.
- SVN의 경우 로그를 변경하더라도 중앙저장소에 반영이 필요하다.
Git/SVN의 흐름
SVN은 위 그림과 같이 중앙 집중식으로 소스가 관리되고 있다.
git은 SVN과는 다르게 저장소를 여러 개 두는 것이 가능하다. 메인 저장소를 따로 두고 소스만 공유하는 저장소를 두면서 프로그래머가 clone을 한 다음에 작업을 진행하고 저장소 관리를 하는 매니저에게 수정 요청을 하는 구조로 개발이 진행된다.
Git과 SVN비교 시 Git의 장점
- 소스코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다.
- 브랜치에서 각각 개발하고 저장한 뒤, 실제 원격 저장소에는 합치는(Merge) 방식으로 진행할 수 있다.
- 분산 버전관리이기 때문에 네트워크가 연결되지 않은 곳에서도 개발하여 로컬 저장소에 저장할 수 있고, 중앙 저장소에 문제가 있더라도 복원이 가능하다.
- 프로그램이나 패치를 배포하는 과정도 간단해질 수 있다.
정리
SVN이 편리한 점이 있으나 단점이 많습니다. SVN은 저장소가 1개이기 때문에 만약 저장소가 장애로 인하여 데이터가 소실된다면 복구가 불가능합니다. 저장소 관리자가 주기적으로 백업을 해줘야하는 번거로움도 존재한다.
반면에 git은 저장소나 로컬에서나 clone만 하면 그 자체가 저장소 복구가 가능해진다. 예를들어 자신의 PC에서 git으로 작업한 파일들이 존재한다면 리모트의 git 저장소가 날라가도 이미 git 저장소의 소스들을 clone한 사용자기 있기 때문에 걱정하지 않아도 된다.
출처🙏