형상관리(Version Control Revision Control)툴
- 소프트웨어 버전 관리 툴이라고도 한다.
- 형상관리는 소스의 변화를 끊임없이 관리하는 것을 말한다.
- 소스를 버전 별로 관리할 수 있어서 개발할 때 실수로 소스를 삭제하거나, 수정하기 이전으로 돌아가야되는 경우 유용하게 사용되는 툴.
- 또한 팀 프로젝트에서도 누가 무엇을 어떻게 수정했는지도 알 수 있기 때문에 코드를 병합하거나 수정된 소스를 추적하는 데에도 쓰인다.
▶ 형상관리툴의 종류
- Client/Server 타입 : Subversion(SVN), CVS, Perforce, ClearCase, TFS
- 분산저장소 타입 : Git, Mercurial, Bitkeeper, SVK, Darcs
- Folder 공유 타입 : RCS, SCCS
SVN
2000년에 CVS를 대체하기 위해 만들어졌으며 현재까지 두루 사용되는 형상관리 툴
*trunk
프로젝트에서 가장 중심이 되는 디렉토리
*branches
trunk에서 뻗어져 나온 나뭇가지를 뜻함. 프로젝트 내의 작은 프로젝트라고 생각하면 됨
*tags
버전 별로 소스코드를 따로 관리하는 공간(버전 별로 태그를 붙여서 tag 디렉토리 안에 보관한다고 생각하면 됨)
- SubVersion. 말 그대로 형상 관리 도구 중 하나로서 파일 서버라고 보시면 됩니다.
- 하나의 파일 서버에서 여러 사람이 작업한 프로젝트의 소스를 통합(커밋, 푸시) 및 관리(히스토리, 브랜치* 등) 하며 저장하기 위해 사용됩니다.
하나의 서버에서 소스를 쉽고 유용하게 관리하기 위함이죠.
SVN의 소스코드는 TRUNK* 라는 곳에 위치합니다. (차 트렁크) Git의 방식과 크게 다른건 없습니다. 각자의 로컬 PC에 소스코드를 내려받고, 소스를 업로드하여 다시 SVN 서버에 업데이트 치는 방식이죠.
SVN
- SVN은 중앙 집중식 코드 관리 방식입니다. 위 그림처럼 하나의 SVN Repository에 접근 가능한 모든 PC가 달라붙어서 소스 코드를 관리합니다. 그렇기 때문에, 저기 한 가운데에 있는 SVN 서버가 없어지거나 터진다면 난리납니다. 전부 잘못되기 때문에 처음부터 다시 시작해야합니다.
- commit의 이미 자체가 중앙 저장소에 해당 기능을 공개한다는 의미.
- 또한, 개개인의 버전 관리를 하지 못합니다 (version history를 가질 수 없다) . 무조건 파일 서버에 Commit 하기 때문에, 다른 사람들의 Log History까지 쭈욱 살펴가면서 자기의 Commit을 찾거나 소스를 찾거나 해야합니다.
-local History를 이용하긴 하지만, 일시적이다. 내가 몇일전 까지에 한하여 작업했던 내역을 확인 가능하지만 버전 관리가 되진 않는다.
- 마지막으로, 충돌 발생이 아주 높습니다. 만약, 소통이 안되서 둘이 동시에 올리게 되거나 그러면? 이를 해결하는데
시간이 오래 걸립니다.
- commit한 내용에 실수가 있을 시에 다른 개발자에게 바로 영향을 미치게 되는 단점도 있다.
Git
매우 빠른 속도와 분산형 저장소. SVN보다 많은 기능을 지원하는 대신 당연히 익숙해지기에 더 많은 시간이 필요함.
- (GIT 과 가장 큰 차이점) 반면, git은 개발자가 자신만의 commit history를 가질 수 있고, 개발자와 서버의 저장소는 독립적으로 관리가 가능.
- commit한 내용에 실수가 있더라도 이 바로 서버에 영향을 미치지 않는다
- 개발자는 마음대로 commit(push)하다가 자신이 원하는 순간에 서버에 변경 내역(commit history)을 보낼 수 있으며, 서버의 통합 관리자는 관리자가 원하는 순간에 각 개발자의 commit history를 가져올 수 있음.
이렇게 git은 서버 저장소와 개발자 저장소가 독립적으로 commit history를 가져갈 수 있기 때문에 매우 유연한 방식으로 소스를 운영할 수 있으며, 이러한 유연성이 git의 가장 큰 장점이다.
- Git 또한 SVN과 같이 형상 관리 도구입니다. Git 서버에 소스코드를 올리거나 브랜치를 사용하며 관리하죠. 하지만, SVN과 차이점이 존재합니다.
- 중앙 집중식 코드 관리 방식의 SVN과는 다르게 Git은 분산 소스코드 관리 방식 입니다. 그렇기 때문에, 빠르고 안전합니다.
- Git은 각각의 PC에 Local Repository가 존재합니다. 그래서 Git Repository(Server Repository) 에 매 Commit마다 접근해서 push하는게 아니라 Local Repository에 Commit하며 쌓아두고 한번에 push해도 됩니다.
이것은 큰 장점인데요. 파일 서버에 접근하는 빈도가 줄어든다는 것은 그만큼 오류나 충돌 발생이 줄어든다는 뜻이니까요.
- 그만큼 단점도 존재합니다. git을 사용하기 위해 git 수행 방법, branch 및 merge, pull request, rebase 등등 git 명령어들도 전부 공부해야합니다. 쉽지 않습니다.
정리
SVN
- SubVersion. 파일 서버 형상관리 툴
- 중앙 집중식 코드 관리 방식
- 장점 : 직관적. 사용법이 간단함
- 단점 : 중앙 SVN서버가 망가지면 전부 잘못됨. 하나의 파일서버에 모든 PC가 직접 소스코드에 접근하기 때문에 충돌 확률이 높음
Git
- 파일 서버 형상관리 툴
- 분산 소스코드 관리 방식
- 장점 : 빠르고 안전함. 로컬에서 복구하기가 용이함. 소스 히스토리 관리가 용이함
- 단점 : Git 사용하기 위해 공부해야하므로, 사용하기 어려움
- Server Repository 전 단계에 각각의 Local Repository 가 존재하여 여기에 Commit을 하며 쌓아두고, 한 번에 Git에 업데이트 가능.
https://goddaehee.tistory.com/158
https://maivve.tistory.com/281
'TOOL > VCS' 카테고리의 다른 글
[GIT] Git Flow, Trunk Based (0) | 2023.01.03 |
---|---|
[GIT] Git을 SVN처럼 이용하기 + Eclipse git Stash 방법 (1) | 2023.01.03 |
[GIT] Eclipse에서 GitLab 프로젝트 PUSH / PULL (0) | 2023.01.02 |
[GIT] 프로젝트 GitLab 연결하기 (0) | 2022.12.29 |
[GIT] 파일 기록하기 git add git commit (0) | 2022.12.16 |