vcs/svn

subversion command

C/H 2014. 11. 4. 08:30

서브버전




상태코드

A
작업 사본에 새로 추가됨
C
엡데이트나 병합 때문에 충돌이 발생함
D
작업 사본에서 삭제됨
G
저장소의 버전과 병합됨
I
작업 사본에서 무시됨
M
작업 사본에서 수정됨
R
작업 사본에서 대체됨
?
버전 제어 대상이 아님
!
작업 사본에 없거나(svn 명령어를 통하지 않고 삭제됨) 불완전한 상태임

임포트

#import 명령어 확인
svn ? import
#svn import 로컬위치 소스위치 -m="메세지"  --no-ignore --force --username username
#  --no-ignore 모두 등록
# -- force 오류 무시 강제 적용 
svn import -m="Import" www svn://localhost/project_name/trunk/

체크아웃, 소스 내려받기

svn checkout 소스 로컬위치
svn co svn://localhost/projectname/trunk ./

상태확인

svn status

변경내역보기

svn diff src/

커밋, 변경사항 적용하기

svn commit -m "변경내역"

파일, 디렉토리 추가

svn add 소스 타켓위치
svn add README.txt docs/
# 디렉토리 전체 추가
# svn status | awk '{if ($1 == "?") print $2 }' | xargs svn add
svn ci -m "docs/README.txt 추가"

# http://stackoverflow.com/questions/2430441/svn-recurisvely-add-files
find . -name .svn -prune -o -name "*.php" -exec svn add --parents {} ';'

파일, 디렉토리 삭제

svn delete 위치/파일
svn delete docs/README.txt
svn ci -m "docs/README.txt 삭제"

파일, 디렉토리 이동 및 이름변경

svn mv 소스 타겟
svn mv docs/README.txt docs/README.back.txt
svn ci -m "docs/README.txt 파일네임 변경"

svn mv docs/README.txt back/README.txt
svn ci -m "README.txt 파일 이동"

파일, 디렉토리 수정사항 되돌리기, 커밋되지 않았을 경우 가능

# svn revert 소스
svn revert docs/README.txt
svn revert -R docs/
# 전부 되돌리기
svn revert -R .

파일/폴더 무시하기

# 무시하려는 파일이 존재하는 디렉토리에서 svn:ignore라는 프로퍼티를 편집한다.
# svn:ignore 에 등록된 내용은 버전 관리대상에서 제외된다.
# 한주에 파일하나씩 나열딘 단순한 텍스트로 와일드카드(*.tmp)를 지원한다.
svn propedit svn:ignore .
svn propset svn:ignore settings.php
# 최상위 폴더에서 제외 대상 폴더 목록을 모두 등록해서 관리한다.
svn propset svn:ignore "./application/cache
./application/logs
./static/_upload
./static/_tmp" .
# 제외 대상을 설정하고 저장

최신버전으로 업데이트

svn update

업데이트 병합

svn update
Conflict discovered in 'docs/README.txt'
Select: (p) postpone, (df) diff-full, (e) edit, (h) Help for more options:

충돌 해결 신고, 문제 해결후 svn에 해결되었다고 신고

svn resolved docs/README.txt

로그보기

svn log | less
# 저장소 로그보기
svn log svn://localhost/project/trunk

변경 사용자 정보 확인, blame

# prais, annotate, ann
svn blame docs/README.txt

리비전 되돌리기

svn merge -r 14:13 .

브랜치 생성

# 릴리즈용 브랜치 생성
svn copy -m "브랜치 1.0 생성" \
	svn://localhost/project/trunk \
	svn://localhost/project/branches/Relese-1.0/

# 브랜치 체크아웃
svn checkout \
	svn://localhost/project/branches/Relese-1.0 \
	project-1.0

브랜치 스위치

svn switch svn://localhost/project/branches/Relese-1.0

Trunk 하나의 리비전 Branches에 병합

svn merge -c 17 svn://localhost/project/trunk
svn commit -m "trunk 리비전 17 병합"

Trunk 여러개의 리비전 Branches에 병합

svn merge r 19:22 svn://localhost/project/trunk
svn commit -m "Trunk 리비전 19-22 병합"

Trunk 수정사항을 Branches 병합

svn update
svn merge --reintegrate svn://localhost/project/trunk
svn commit -m "Trunk 모든 변경사항 병합"

Branches에서 기능추가 완료 후 Trunk 병합

svn update
svn merge --reintegrate svn://localhost/project/branches/i18n
svn commit -m "병합"

릴리즈 태그 만들기

svn update
svn copy . svn://localhost/project/tags/REL_1.0.0 -m "R1.0.0 Tag 생성"

파일 잠금

#잠금기능 설정
svn propset svn:needs-lock yes docs/README.txt
svn commit -m "편집하기 전에 잠그고 작업하세요."

#잠금은 svn:needs-lock *|yes 로 설정한다. 
#잠금 설정후 커밋한다 이 후 update 시 읽기 전용으로 설정된다.
#잠금은 우선순위가 있고 잠금사람만이 해제를 할 수 있지만, 강제 잠금 해제도 가능하다.

#잠금 적용
svn update
svn lock README.txt -m "현재 수정중"

#점금 해제
svn unlock README.txt

#강제 잠금해제
svn lock README.txt
svn: warning: Path '/runkt/docs/README.txt' is already locked by user 'username' in filesystem '/home/svn/project/db'
svn unlock --force README.txt
'README.txt' unlocked.

#잠금 뺏어오기
svn lock README.txt
svn: warning: Path '/runkt/docs/README.txt' is already locked by user 'username' in filesystem '/home/svn/project/db'
svn lock --force README.txt
'README.txt' locked by user 'newusername'

에디터 에러

export SVN_EDITOR=/usr/bin/vim
#or 
export EDITOR=/usr/bin/vim


반응형

'vcs > svn' 카테고리의 다른 글

CVS 를 Subversion으로 이동 svx2svn  (0) 2014.11.06
Apache Subversion  (0) 2014.11.05
subversion  (0) 2012.07.11
svn: No repository found in svn://xxx.xxx.xxx.xxx/trunk  (0) 2010.11.02
subversion + eclipse  (0) 2010.07.15