본문 바로가기

Archived(IT)/배경지식_기술

형상관리 툴 SVN(SubVersioN), Git과의 차이점

형상관리(Software Configuration Management)

 형상 관리는 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것으로, 형상 관리는 일반적인 단순 버전관리 기반의 소프트웨어 운용을 좀 더 포괄적인 학술 분야의 형태로 넓히는 근간을 이야기한다. 즉, 하나의 소프트웨어 산출물(binary)을 생성하기 위해 필요로 하는 아이템들과 공정 방식의 정의, 그리고 재생성을 위한 전반적인 환경까지 베이스라인(baseline)화하여 관리하는 방식 전체를 의미하며 이를 체계화한 사항을 형상 관리 시스템으로 정의하고 있다.

 

SVN(SubVersioN)

SVN은 형상관리 툴의 일종으로, 2000년도에 커밋 오류 시 롤백 불가 등의 문제를 앓고 있던 CVS를 대체하기 위해 만들어졌으며 현재까지 두루 사용되는 형상관리 툴이다. 

용어

저장소 : 리포지토리(Repository)라고도 하며 소스들과 변경 사항들 등 모든 것들이 저장되는 장소. 네트워크를 통해서 여러 사람과 공유 가능. 버전 관리 시스템 마다 각각 다른 파일 시스템을 가지고 있으며 Subversion은 Berkeley DB를 사용하며 한 프로젝트 마다 하나의 저장소가 필요합니다.

리비전(Revision) : 저장소에 저장된 각각의 파일 버전. 소스 파일등을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가.  Subversion의 경우 파일별로 리비전이 매겨지지 않고 한번 커밋 한 것으로 전체 리비전이 매겨진다. 리비전을 보고 프로젝트 진행 상황을 파악 가능하다.

trunk : 단어 자체의 뜻은 본체 부분, 나무줄기, 몸통 등. 프로젝트에서 가장 중심이 되는 디렉토리. 모든 프로그램 개발 작업은 trunk 디렉토리에서 이루어진다. 그래서 위의 구조에서 trunk 디렉토리 아래에는 바로 소스들의 파일과 디렉토리가 들어가게 된다.

branches : 나무줄기(trunk)에서 뻗어져 나온 나무 가지를 뜻함. (Git의 branch와 유사개념) trunk 디렉토리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생김. 프로젝트안의 작은 프로젝트. branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발을 할 수 있음.

tags : tag는 꼬리표라는 뜻. 이 디렉토리는 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0 하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를 따로 저장하는 공간. 

 

명령어

Import : svn import sampledir svn+ssh://svn-domain/svn/sample/trunk
맨 처음 프로젝트 시작할때 저장소에 등록하는 명령어

Checkout : svn checkout svn+ssh://svn-domain/svn/sample/trunk sample
저장소에서 소스를 받아 오는 명령어. 받아온 소스에는 소스 뿐만이 아니라 버젼관리를 위한 파일도 같이 받아 온다. 지우거나 변경시 저장소와 연결 불가능

Export : svn export svn+ssh://svn-domain/svn/sample2/trunk sample
체크아웃과는 달리 버젼관리 파일을 뺀 순수한 소스만 가져오는 명령어 마지막에 사용.

Commit : svn commit
체크아웃 한 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신 하는 명령어. Revision이 1 증가 한다.

Update : svn update
체크아웃 해서 받은 소스를 최신의 소스로 업데이트 하는 명령어. 

Log : svn log
저장소에 어떠한 것들이 변경 되었는지 확인 할 수 있는 log 명령어

Diff : svn diff --revision 4 sample.c
diff 명령은 예전 소스 파일과 지금의 소스 파일을 비교해 보는 명령어

Blame : svn blame sample.c
Blame은 한 소스파일을 대상으로 각 리비전 대해서 어떤 행을 누가 수정했는지 알아보기 위한 명령어

lock : svn lock hello.c
파일에 락을 걸어 락을 건 사용자만이 수정할 수 있게 해주는 명령어.

해제는 svn unlock (락에 대한 이유도 설정가능)

Add : svn add hello.c
새 파일을 만들었을 경우에 파일을 추가 해주는 명령어. 그 뒤엔 꼭 svn commit를 꼭 해줘야 한다.

https://pccoms.tistory.com/entry/SVN-용어설명 [피씨컴의 기울어진 공관]

 

Git 과의 차이점

개발자 자신만의 Version History를 가질 수 없다

또한 중앙집중식 버전관리 시스템으로 Git의 분산 버전관리 시스템과의 차이점도 존재한다(https://rojhw.tistory.com/m/27)