svn

SVN 1.10+

Subversion(SVN) 명령어 빠른 참조: checkout, update, commit, branch/tag, merge, 히스토리 조회, 저장소 관리 — 자주 쓰는 옵션과 실전 예시까지 정리했습니다.

명령어 28개

시작하기

svn checkout <url> [<dir>]

저장소에서 작업 사본을 체크아웃; 프로젝트 파일을 처음 받을 때 사용.

-r <rev> 특정 리비전; --depth empty|files|immediates|infinity

svn checkout https://svn.example.com/repo/trunk ./my-project
svn info

작업 사본 또는 URL 정보 표시: URL, 리비전, 마지막 수정 등.

svn info .

매일 작업

svn update

작업 사본을 저장소와 동기화; 서버 변경을 병합할 수 있습니다.

-r <rev> 특정 리비전으로 업데이트; --accept postpone|base|mine-full|theirs-full|edit|launch

svn update --accept postpone
svn status

작업 사본 상태 표시: 수정, 추가, 삭제, 추적 안 됨.

-u 서버 out-of-date 정보; -v verbose; --quiet 추적 안 됨 숨김

svn status -u
svn add <path>

다음 커밋 시 추가할 파일 또는 디렉터리를 예약합니다.

-N 비재귀(디렉터리만); --force 이미 버전 관리 중인 파일도 추가

svn add src/utils/ helpers/
svn delete <path>

작업 사본에서 파일 또는 디렉터리를 제거하고 다음 커밋에서 삭제를 예약합니다.

--keep-local 작업 사본에 파일 유지(서버에서 삭제 안 함)

svn delete obsolete/old-config.json
svn commit -m "<msg>"

로컬 변경을 로그 메시지와 함께 저장소로 보냅니다.

-m 인라인 메시지; -F <file> 파일에서 메시지 읽기; --no-unlock 잠금 유지

svn commit -m "feat: add login form validation"
svn diff

경로 또는 리비전 간의 통합 diff 를 보여줍니다.

-r <rev1>:<rev2> 리비전 비교; -c <rev> 그 리비전의 변경; --diff-cmd / -x

svn diff -r HEAD~5:HEAD --summarize
svn revert <path>

로컬 변경을 폐기하고 파일/디렉터리를 원상복구합니다.

-R 재귀; --depth infinite

svn revert -R .

브랜치 & 태그

svn copy <src> <dst>

저장소에서 복사로 브랜치 또는 태그 생성(저렴한 복사).

-r <rev> 특정 리비전에서 복사; -m 메시지

svn copy ^/trunk ^/branches/feature-x -m "branch: feature-x"
svn switch <url>

재체크아웃 없이 작업 사본을 다른 브랜치/태그로 가리키게 합니다.

-r <rev> 특정 리비전으로 전환; --relocate URL 접두사 재작성

svn switch ^/branches/feature-x
svn list <url>

체크아웃 없이 저장소 디렉터리 항목을 나열합니다.

-v verbose; -r <rev>

svn list -v ^/tags/

병합 & 충돌

svn merge <url[@rev]>

두 소스/브랜치 간의 차이를 작업 사본에 적용합니다.

-c <rev> / -r <rev1>:<rev2> 병합할 리비전; --record-only 추적만

svn merge ^/trunk -c 12345
svn merge --reintegrate <url>

기능 브랜치를 원래 브랜치로 다시 통합(레거시, 1.8 이전).

svn merge --reintegrate ^/branches/feature-x
svn resolve <path>

병합/업데이트 후 충돌 파일을 해결합니다.

--accept base|mine-full|theirs-full|working|theirs-conflict|theirs-full

svn resolve --accept theirs-full conflict.txt

히스토리 & 조회

svn log

파일 또는 저장소의 커밋 로그 메시지를 표시합니다.

-r <rev1>:<rev2> 범위; -l <n> 제한; -v 경로 verbose; --xml

svn log -l 20 -v
svn blame <file>

파일의 각 줄에 대해 작성자와 리비전을 표시합니다(praise / annotate).

-r <rev> 지정 리비전 기준 주석; -v 리비전 텍스트 포함

svn blame src/index.ts | tail -20
svn cat <url>[@rev]

체크아웃 없이 주어진 URL/리비전의 파일 내용을 보여줍니다.

svn cat ^/trunk/README.md@HEAD

속성 & 잠금

svn propset <prop> <value> <path>

파일 또는 디렉터리에 속성을 설정합니다(예: svn:ignore, svn:executable, svn:mime-type).

-F <file> 값은 파일에서; --revprop 저장소 revprop

svn propset svn:ignore "node_modules\n.DS_Store" .
svn propedit <prop> <path>

에디터에서 속성 값을 열어 변경합니다.

svn propedit svn:ignore .
svn lock <target>

다른 클라이언트가 커밋하지 못하도록 파일을 잠급니다(서버 설정 필요).

-m "reason"; --force 잠금 강제 탈취

svn lock images/banner.png -m "editing before release"
svn unlock <target>

파일 또는 디렉터리의 잠금을 해제합니다.

--force 다른 사람의 잠금 해제

svn unlock images/banner.png

저장소 & 정리

svn cleanup

작업 사본 정리: 잠금 토큰 제거, 타임스탬프 수정, 보류 중인 작업 완료.

--diff3-cmd / --remove-unversioned 추적 안 됨 정리

svn cleanup /path/to/wc
svn export <url> [<dir>]

(.svn 메타데이터 없는) 깨끗한 디렉터리 트리를 내보냅니다 — 패키징에 유용.

-r <rev> 특정 리비전; --force 기존 파일 덮어쓰기

svn export ^/tags/v1.2.0 ./release-1.2
svn import <path> <url> -m "<msg>"

버전 관리되지 않은 트리를 단일 초기 커밋으로 저장소에 추가합니다.

--no-ignore 무시된 파일 포함; --auto-props auto-props 적용

svn import ./src ^/trunk -m "initial import"
svn relocate <from-prefix> <to-prefix>

작업 사본에 저장된 저장소 URL 접두사를 다시 씁니다(서버 이동).

--strict 매치하지 않는 접두사 거부

svn relocate https://old.svn.example.com https://new.svn.example.com

패치

svn diff > patch.diff

공유나 svn patch 적용에 적합한 통합 diff 를 생성합니다.

svn diff > /tmp/feature-x.patch
svn patch <patch-file>

svn diff 로 생성된 통합 diff 를 작업 사본에 적용합니다.

--dry-run 미리 보기; --reverse-cmd

svn patch --dry-run /tmp/feature-x.patch

관련 명령어 치트시트

Apache Subversion 소개

Apache Subversion(보통 SVN으로 줄여 씀)은 2000년 CollabNet이 처음 출시한 후 Apache 소프트웨어 재단이 관리하는 오픈 소스 중앙 집중형 버전 관리 시스템입니다. SVN은 정식 기록을 단일 서버(보통 Apache HTTP 또는 `svnserve`로 서비스됨)에 보관하며, 리포지토리 전체에 걸쳐 단조 증가하는 리비전 번호로 변경 사항을 추적합니다. 이는 Git의 콘텐츠 해시 방식과 대조적입니다. 현재 안정 버전은 Subversion 1.14+입니다. SVN은 리포지토리를 파일 시스템 트리로 모델링하고, 세 가지 백엔드 형식(1.4부터 기본인 FSFS)을 가지며, 디렉터리를 통한 값싼 분기, 원자적 커밋, 메타데이터를 위한 속성, 공유 컴포넌트를 위한 externals 참조, 1.5부터의 병합 추적을 지원합니다. 중앙 집중식 권위 있는 기록과 세밀한 경로 기반 접근 제어가 오프라인 분기보다 중요한 엔터프라이즈·정부·게임/미디어 스튜디오에서 널리 사용됩니다. 조직이 중앙 집중형 VCS를 강제하거나, 잠금 기능으로 대용량 바이너리 자산을 버전 관리하거나, 레거시 SVN 리포지토리를 유지할 때 사용하세요. SVN 평문 HTTP는 암호화되지 않으므로, 운영 환경에서는 반드시 HTTPS 또는 `svn+ssh`로 운용하세요.

치트시트 버전 1.0.0