SVN 개념

yejiiha·2021년 7월 1일
0

SVN

  • Subversion의 약자
  • 소스 코드의 버전 관리 시스템

🌱 SVN 장점과 단점

장점

  • SVN은 로컬 PC에서 commit을 하면 바로 중앙저장소에 반영이 된다
    -> 모든 사람이 중앙서버에 있는 같은 자료를 받아오고 내가 commit을 하는 순간 모든 사람에게 공유가 된다

단점

  • 두 사람이 하나의 파일을 동시에 수정하고 커밋했을 때 충돌이 일어날 확률이 높다

🌱 SVN 사용 흐름

  • 최초로 서버 소스를 checkout 한다
  • 소스를 수정한다
  • commit할 파일을 add 한다
  • update를 통해서 저장소에 새로운 파일이 없는지 확인한다
  • update 과정에서 conflict가 일어나면 이를 해결한다 (수정 후, resolve 해주어야 함)
  • commit을 해서 저장소에 파일을 등록한다

repository (저장소)

  • 프로젝트의 파일 및 변경 정보가 저장되는 장소

trunk

  • 메인 개발 소스
  • 개발 소스를 commit 했을 때 개발 소스가 모이는 곳
  • git에서의 master branch

branch

  • trunk에서 분기된 개발 소스
  • 실험적인 기능을 추가하거나, 출시를 위한 안정화 버전 작업을 할 때

tag

  • 특정 시점에서 프로젝트의 스냅샷을 찍어두는 것
  • branch와 tag는 사실 동일하지만, tag는 관례적으로 더 이상 개발하지 않고 어떤 버전으로 딱 얼려두는 것
  • tagging 하는 것도 revision으로 기록된다

🌱 SVN 명령어

checkout

  • 원격 저장소에서 최신 버전의 소스코드를 최초로 받아오는 것
  • git clone
# sandbox 디렉토리에 체크아웃받음
svn checkout[co] svn://127.0.0.1/TestRepo1

# source 디렉토리에 체크아웃받음
svn checkout[co] svn://127.0.0.1/TestRepo1 LocalRepo1

import

  • 아무것도 들어있지 않은 원격 저장소에 처음으로 파일을 업로드 할 때 한번만 사용
svn import sampledir svn://127.0.0.1/TestRepo1/trunk

export

  • 버전 관리 파일들을 뺀 순수한 파일들만 빼내는 것
svn export svn://127.0.0.1/TestRepo1

update

  • 로컬 저장소에 있는 파일들을 원격 저장소의 최신 버전으로 받아오는 것 (다운로드)
  • git pull
svn update[up]

#현재 작업 내용을 리비전 1로 갱신(최신 리비전보다 이전으로 되돌리는 것도 가능)
svn update[up] -r 1

add

  • 버전 관리 대상으로 파일을 등록하는 것 (업로드)
  • 저장소에 저장은 되지 않음 (add 후 commit 해야 적용된다)
  • git add
svn add main.c

commit

  • 로컬 저장소의 변경된 내용을 서버로 전송하는 것
  • revision 수가 올라간다
  • commit 전에는 update를 실행해 최신소스로 변경하고, 컴파일이 성공했을 경우에만 커밋을 해야 한다
  • git commit + git push
svn commit[ci] -m "수정사항에 대한 메시지 입력"

status

  • 로컬 저장소에서 변경된 이후 아직 저장소로 commit 되지 않은 내용을 확인
  • A: 추가됨 / C: 충돌됨 / D : 삭제됨 / M : 수정됨 / G : 병합됨
  • git status
svn status[stat, st] main.c

revert

  • 로컬 저장소의 내용을 이전 상태로 되돌리는 것
  • 변경 취소
  • git checkout / git reset
    ⚠️ SVN의 revert는 변경 취소이지만 Git의 revert는 삭제 용 커밋으로서 같은 명령어라도 의미가 서로 다르다
#로컬 저장소 복사본 main.c에 가했던 변경들을 모두 취소함
svn revert main.c

diff

  • 소스 차이점 비교
  • git diff
svn diff[di] 

#저장소의 내용과 현재 작업 내용 중 main.c 파일이 차이를 확인
svn diff[di] main.c

#리비전 1과 2의 차이를 확인
svn diff[di] -r 1:2

#리비전 1과 현재 작업중인 main.c의 차이를 확인
svn diff[di] -r 1 main.c

#리비전 2와 현재 작업중인 디렉토리의 파일내용 차이를 확인
svn diff[di] -r 2

log

  • 리비전 로그보기
  • git log
svn log

#리비전 4의 변경사항 로그 보기
svn log -r 4

#리비전 4의 test.c 파일의 변경사항 로그 보기
svn log -r 4 test.c

#리비전 4 ~ 5의 변경사항 로그 보기
svn log -r 4:5

switch

  • 소스 서버 변경하기
  • git checkout
svn switch[sw] --relocate [이전주소] [새로운주소]

출처
https://dzzienki.tistory.com/46
https://hellowoori.tistory.com/57
https://backlog.com/git-tutorial/kr/reference/git-svn.html

profile
Frontend Developer

0개의 댓글