Search

SVN 삽질기

미리 이야기를 먼저 하자면 “알고 있다. GIT 쓰면 된다.” 하지만 SVN을 안 쓸 수 없는 상황이란게 생기더라. 상황이 생겼으니 해결을 해야 하는게 인지상정.

사건 : SVN 이전해야 하는 이슈 발생

이전 사용했던 환경 : Windows에 CollabNetSubversion-server-1.8.11-1-Win32 으로 svn server를 설치해서 사용
옮겨가야 하는 환경 : Synology DS 920+, DSM 7.1

STUDY

SVN은 REVISION의 증가에 따른 증분 저장 ( GIT은 스냅샷 저장 )
중간에 Revision이 깨지면 연결 고리가 끊어진 것으로 봐야 한다.
이 고리가 끊어지면 svnadmin dump도 svnsync도 글러먹은 상태
최신 버전을 받더라도 오래전에 생성된 파일이라면 앞으로 앞으로 거슬러 올라간다.

문제 1

DSM 7.1에는 svn package가 없음
생성된 DOCKER에 접근하는 방법
ssh woore@192.168.100.96 docker ps sudo docker container exec -it CONTAINER_ID | sh
Bash
복사

문제 2

특정 REVISION이 COPY를 하려고 하면 CRC에러를 낸다.
DUMP가 만들어지지 않음.
VisualSVN에서 경로로 import 하는 것도 안 됨.

TRY 1

DUMP
svnadmin dump file:///E:/svn_backup/myproject > svn_dump.dump
실패
CRC파일을 읽을 수 없어서 DUMP가 만들어지다가 중간에 오류 발생
혹여 덤프가 만들어졌더라도 REVISION이 20000이 넘어가서 DUMP를 만드는데 이틀 이상 걸릴 것이라고 예상
증분 DUMP
svnadmin dump --incremental -r 20001:HEAD file:///E:/svn_backup/myproject > 20221207_20001_HEAD.dump
0 - 5000, 5001-10000, 10001-15000, 15001-20000, 20001-HEAD까지 분할로 증분 DUMP를 만들어서 문제가 있는 곳을 회피하는 방식을 생각 함
실패
만일 문제가 있는 REVISION이 3030 이라고 할 때 3031, 3032, 3040, 3052 REVISION이 3030에 포함된 파일을 필요로 할 때 똑같이 에러가 발생. 3030에 있는 파일이 필요한 REVISION을 모두 패스해야 해서… 이건 불가능.

TRY 2

svnsync로 백업 시도
svnadmin.exe create myproject svnsync.exe init file:///E:/svn_backup/myproject svn://192.168.100.11/myproject --sync-username myid --sync-password 1111 svnsync.exe sync file:///E:/svn_backup/myproject
PowerShell
복사
실패.
리비전을 하나씩 가져와서 COMMIT을 재 수행하는 방식인데 CRC가 깨진 Revision인 경우 DISK에서 읽어들이는 것이 안되서 COMMIT을 할 수 없다.

TRY 3

Visual SVN에 import 를 이용하여 문제가 있는 파일을 회피하고 Visual SVN에서 정상적으로 import가 되었다면 이걸로 SYNC / DUMP를 시도
Visual SVN의 import는 Hot Copy에 준하게 파일만 정상적이면 통과.
문제가 생긴 파일은 폴더에서 빼서 별도로 저장
svn_repository / db / revprops / 0 ~ XXXX 폴더
revs에 묶여서 저장된 파일에 대한 정보.
svn_repository / db / revs / 0 ~ XXXX 폴더
Commit을 했을 때 Commit된 파일을 하나의 파일로 묶어서 저장해놓은 것.
실패1
Revision이 빠진 채로는 import 안됨
SVN은 Revision을 순차적으로 찾음. 그래서 이 빠진 REVISION이 반드시 필요함.
실패2
문제 생긴 Revision을 앞 혹은 뒤에 있는 것으로 대치
IMPORT는 정상적으로 완료
CHECK OUT을 할 때 문제 있는 Revision의 파일이 필요한 경우 땜빵해놓은 Revision에 정보가 정확하지 않아 CHECK OUT에 실패

Q&A

Q.
덤프파일 복원을 하려고 하는데 svnadmin: E140001: Malformed dumpfile header '?\FF?\FES’ 에러가 발생
A.
Windows PowerShell로 백업파일을 만들고 linux에서 복원하려고 하면 생기는 문제.
PowerShell말고 명령프롬프트( cmd )에서 백업파일을 만들어야 한다.