svn update

Tool/Subversion 2012. 10. 30. 23:52

저장소의 최신 리비전을 작업 사본으로 가져와 같은 리비전으로 변경됩니다.
주로 커밋전에 사용되기도 하고, update로 변경될 사항들을 svn st -u 명령으로 미리 확인할 수 있습니다.

 

 

update
usage : update [PATH...]

 

저장소에 변경된 작업물들을 작업 사본으로 가져옵니다.
리비전을 지정하지 않으면 최신(HEAD)의 리비전을 가져옵니다.
또한 특정 리비전(-r)으로 작업 사본을 동기화 시킬수도 있습니다.

 

업데이트 된 각 작업물들의 앞에는 알파벳 한 문자로 출력됩니다.
A 추가됨(Added)
D 삭제됨(Deleted)
U 갱신됨(Updated)
C 충돌함(Conflict)
G 합쳐짐(merGed)
E 존재함(Existed)

 

첫번째 컬럼의 문자는 실제 파일이 변경됨을 뜻합니다.
두번재 컴럼의 문자는 파일의 속성에 대한 변경을 뜻합니다.
세번째 컬럼에 B 는 잠긴 파일이 깨지거나(Broken) 사라졌음(Stolen)을 뜻합니다.

 

$ svn up
A    txt.c
D    txt.h
U    ext.c
G    abc.c
C    bar.c
Updated to revision 10.

 

txt.c(A) 파일은 작업 사본에는 없었지만 저장소에 추가된 파일이라 가져왔습니다.
txt.h(D) 파일은 작업 사본에는 있었지만 저장소에서 삭제된 파일이라 작업 사본에서도 삭제되었습니다.
ext.c(U) 파일은 저장소의 내용으로 작업 사본이 갱신되었습니다.
abc.c(G) 파일은 작업 사본에서 수정한 파일이지만 저장소에 수정된 부분과 겹치지 않아서 파일 내용에 알맞게 합쳐졌습니다.
bar.c(C) 파일은 작업 사본에서 수정한 부분과 저장소에서 수정된 부분이 겹쳐져서 충돌이 생겼습니다.

 

충돌(C)을 제외한 나머지 상태들은 크게 신경쓸게 없지만, 충돌의 경우 약간 작업이 필요합니다.
누군가 커밋한 파일을 업데이트 받지 않고 해당 파일의 겹치는 부분을 수정하여 커밋하려 할 때 커밋 실패 메시지가 출력됩니다.

 

$ svn ci -m 'modify by oops4u' test.txt
svn: Commit failed (details follow):
svn: File or directory 'test.txt' is out of date; try updating
svn: resource out of date; try updating

 

이 때는 최신 리비전으로 update 해야 하며 update할 때는 충돌을 예상할 수 있습니다.

 

$ svn up
Conflict discovered in 'test.txt'.
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

 

충돌 메시지가 나타나며 진행 방법을 선택할 수 있습니다.
충돌이 발생한 원본 파일(위에서는 test.txt)에는 충돌에 대한 내용이 포함되어 있습니다.
(df) 는 충돌이 발생한 부분을 확인할 수 있습니다.
확인 후에 (e) 로 편집기를 열어 바로 수정할 수 있습니다.
수정 후에는 (r) resolved 옵션이 추가되는데 편집기에서 충돌을 정상적으로 해결했다면 (r) 입력하여 해결할 수 있습니다.
무조건 내 작업물을 남기려면 (mc)를 입력하고 커밋을 하면 저장소에 본인의 작업물로 갱신됩니다.
당장 해결할 수 없는 문제라면 (p) 버튼을 눌러 파일을 충돌 상태(C)로 남기며 update를 완료합니다.
postpone 이 선택되면 file, file.mine, file.r21, file.r22 등 3개 파일이 더 생성됩니다.
(p)가 아닌 (r)을 입력하면 원본 파일을 제외한 *.mine, *.r21, *.r22 등의 파일들은 생성되지 않으며 상태는 G(merGe) 상태가 됩니다.
머지 상태는 두 버전의 내용이 절충되어 충돌이 해결된 상태라고 생각하면 됩니다.
고장날 일 없으니 각 옵션 별로 테스트를 해보면 이해가 빠를 겁니다.

 

file.r21 은 마지막으로 저장소에서 받은 file 원본
file.mine 은 r21을 작업 사본에서 수정한 file 작업물
file.r22 는 저장소의 최신 file 작업물
file 은 r21 원본위에 충돌난 부분이 <<<<<< .mine ======== >>>>>>> .r22 등으로 표시

 

작업자와 상의하여 파일을 합친 후 생성된 3개 파일을 삭제하고 커밋하여 충돌을 해결합니다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret