본문 바로가기

DB/SQLite

Subversion 1.8 버전 업데이트 후

지난번 http://namocom.tistory.com/259 글을 통해 서브버전 버전을 업데이트를 했다고 글을 썼다.

이제 클라이언트도 1.8버전을 쓸 수 있어서 TortoiseSVN와 AnkhSVN 모두 1.8을 지원하는 버전(1.8.4.24972 / 2.5.12266)으로 업데이트를 했다.


그런데 과거 1.6에서 1.7로 업데이트를 했었을 때 처럼 체크아웃 받은 공간을 업그레이드가 필요하다는 메시지가 나온다.

Subversion detected a working copy that needs an explicit upgrade in ~~ While this working copy is not upgraded all files in this working copy will appear as new. When a working copy is upgraded it can no longer be used by Subversion clients that weren't designed for this (or later) working copy formats. Further working copy upgrade required warnings are suppressed until after you restart Visual Studio or upgrade a working copy.


솔루션 탐색기(실제로는 솔루션 탐색기를 가장한 서브버전 탐색기이지만)에도 변화가 생겼음을 나타내는 아이콘이 생겼다.

The working copy at ~~ is too old (format 29) to work with client version '1.8.4-SharpSvn-1.8.4-WIN32 (SharpSvn/1.8.4) WIN32' (expects format 31). You need to upgrade the working copy first.



무시하고 커밋을 하려고 했더니 아래와 같이 에러 메시지가 뜬다.


지난번에는 upgrade 명령을 Visual Studio에서 직접할 수 있었는데 업그레이드 메뉴가 없었다.

그래서 솔루션을 닫고 명령 프롬프트의 힘을 비는 수 밖에...


svn status 명령을 쳐보니 아래와 같았다.

>svn status

svn: E155036: Please see the 'svn upgrade' command

svn: E155036: The working copy at 'C:\Users\namo\Desktop\SHD_2020\_code\v2' is too old (format 29) to work with client version '1.8.5 (r1542147)' (expects format 31). You need to upgrade the working copy first.


1.8.5 클라이언트는 포맷 31을 사용한다는 것이다.

기존에 체크아웃을 했던 포맷은 29란다.


여기서 할 수 있는 명령은 메시지와 같이 svn upgrade 밖에 없다.

>svn upgrade

Upgraded '.'


어떠한 변화가 생겼는 궁금해서 비교를 해보니...


entries와 format이라는 파일이 사라졌다.

entries과 format을 열어보면 달랑 12와 줄바꿈 문자만 있는 파일이다.

wc.db는 sqlite db이다.

열어서 테이블을 비교하니 변화는 없었다.

before\v2\.svn>sqlite3 wc.db

SQLite version 3.7.11 2012-03-20 11:35:50

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite> .tables

ACTUAL_NODE    NODES          PRISTINE       WC_LOCK

EXTERNALS      NODES_BASE     REPOSITORY     WORK_QUEUE

LOCK           NODES_CURRENT  WCROOT

sqlite>.exit

later\v2\.svn>sqlite3 wc.db

SQLite version 3.7.11 2012-03-20 11:35:50

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite> .tables

ACTUAL_NODE    NODES          PRISTINE       WC_LOCK

EXTERNALS      NODES_BASE     REPOSITORY     WORK_QUEUE

LOCK           NODES_CURRENT  WCROOT

sqlite>


테이블 스키마를 아래 스크립트를 만들어서 비교해니 몇가지 변화가 생겼다.

.output schema.sql

.schema ACTUAL_NODE

.schema NODES

.schema PRISTINE

.schema WC_LOCK

.schema EXTERNALS

.schema NODES_BASE

.schema REPOSITORY

.schema WORK_QUEUE

.schema LOCK

.schema NODES_CURRENT

.schema WCROOT

.output stdout


변화는 NODES 테이블을 제외하고는 테이블 보다는 인덱스 같은 부가 정보가 추가 되었다.


NODES 테이블

 - inherited_props라는 BLOB 타입의 컬럼이 추가

 - I_NODES_MOVED 라는 인덱스 추가

+    CREATE UNIQUE INDEX I_NODES_MOVED ON NODES (wc_id, moved_to, op_depth);

 - 기존 I_NODES_PARENT가 UNIQUE 제약조건 추가, 대상 컬럼 local_relpath 추가

-    CREATE             INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath,                    op_depth);

+    CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, local_relpath, op_depth);


ACTUAL_NODE 테이블

 - I_ACTUAL_CHANGELIST 라는 인덱스 추가

+    CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist);

 - 기존 I_ACTUAL_PARENT UNIQUE 제약조건 추가, 대상 컬럼 local_relpath 추가

-    CREATE             INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath);

+    CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, local_relpath);


PRISTINE 테이블

 - PRISTINE 테이블의 md5_checksum 컬럼에 대한 I_PRISTINE_MD5라는 이름의 인덱스 추가

+    CREATE INDEX I_PRISTINE_MD5 ON PRISTINE (md5_checksum);


EXTERNALS 테이블

 - 기존 I_EXTERNALS_PARENT 인덱스의 제거

-    CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath);


찾아보니 가장 큰 변화는 WC-NG라고 한다. 기존에 사용하던 WC(Working Copy) 라이브러리가 너무 복잡해지고 관리가 어려워지고 효율이 떨어지다보니 WC-NG(Working Copy-Next Generation)라는 이름으로 1.7버전부터 개선을 했다고 한다.

사실 서브버전 1.7부터 기존에는 폴더마다 존재하던 .svn이 없어지고 wc.db 같은 메타데이터를 관리하기 위한 파일DB가 추가 되었다.


참고: http://svn.apache.org/repos/asf/subversion/trunk/notes/wc-ng/design


새로운 기능들은 아래 글을 참조, Git하고 비교하는 글들이 있다.

Apache Subversion 1.8 Release Notes: http://subversion.apache.org/docs/release-notes/1.8.html

Subversion 1.8 Gits New Features: http://www.developer.com/open/subversion-1.8-gits-new-features.html (한글)

Subversion 1.8 Released But Will You Still Use Git?: http://slashdot.org/story/13/06/19/1349228/subversion-18-released-but-will-you-still-use-git



'DB > SQLite' 카테고리의 다른 글

여러 데이터 합치기 (attach 명령)  (0) 2016.08.12
sqlite를 이용해서 자료 분석  (0) 2012.11.19