원래 질문은 아래와 같습니다. 나는 이것을 작동시킬 수 있는지 알아보기 위해 몇 가지 시도를 해왔다.SVN : 프로젝트를 자체 repo로 이동하는 데 필요한 덤프를 최소화하십시오.
svnadmin dump -r108917 ./repo \
| svndumpfilter include /KeyManagement \
--drop-empty-revs \
--skip-missing-merge-sources \
--renumber-revs > km.svndump \
while read rev
do
svnadmin dump -r$rev --incremental ./repo \
| svndumpfilter include /KeyManagement \
--drop-empty-revs \
--skip-missing-merge-sources \
--renumber-revs >> km.svndump
done << km.revs.txt
km.revs.txt
단순히 /KeyManagment
프로젝트에 대한 변경 사항을 포함 된 버전을 포함하는 텍스트 파일입니다 :
처음이 작업을 수행했을 때 나중에 필터링을 수행 할 것이라고 생각했습니다. 그러나 첫 번째 개정판에서 덤프 된 km.svndump
은 68 기가 바이트 이상으로 커졌습니다. 오케이. 두 번째 시도에서는 svndumpfilter
을 통해 프로젝트를 필터링하고 있습니다.
이것은 꽤 오래 실행되었으며 (I nohup
) 간단히 수시로 확인했습니다. 내가 끝나면 km.svndump
에 UUID, 첫 번째 수정본 및 메모리 부족을 표시했습니다. 오류가 발생했습니다. 명백하게, 내 대본은 덤프 될 첫 번째 개정을 통과하지 못했습니다.
아이디어를 계속하려면 어떻게해야합니까?
우리는 저장소의 나머지 정말 호환의 특별한 프로젝트와 저장소를 가지고있다. 전체 저장소는 LDAP 그룹 Development
의 모든 사용자가 볼 수 있습니다. 그러나 한 프로젝트에는 해당 프로젝트에서 작업하는 사람들 만 볼 수있는 정보가 포함되어 있습니다. (KeyManagement 프로젝트). 되찾기 레이아웃은 다음과 같습니다
/trunk
- 지점 REPO/tags
의 나머지 부분에 대한 - -/branches
REPO의 나머지 트렁크의 repo의 나머지 부분에 대한 태그/KeyManagement
- 특수한 KeyManagement 프로젝트.
우리는 눈을 피하기 위해 svn_acces 파일을 사용하여이를 볼 수있는 사용자를 지정합니다. 이로 인해 유지 관리에 많은 문제가 발생했으며, KeyManagement
을 고유 한 LDAP 액세스 그룹이있는 별도의 저장소로 만들고 싶습니다. (이미 자체 LDAP 그룹에 여러 repos가 있습니다.)
문제는 Repo에서 175,000 개가 넘는 수정이 있었고 그 중 124 개만 KeyManagement 프로젝트와 관련이 있다는 것입니다. 17 만 5 천 건의 수정본을 모두 덤핑하면 약 30 시간 이상이 걸립니다. 필요한 개정판을 버리면 2 시간 내에 전체 덤프를 할 수 있습니다. 분명히, KeyManagement
이 /trunk
에서 한 번도했다
$ svn log -r108917:108918 -v $REPO
------------------------------------------------------------------------
r108917 | svnadmin | 2011-03-23 00:46:04 -0500 (Wed, 23 Mar 2011) | 1 line
Changed paths:
A /KeyManagement
New folder KeyManagement
------------------------------------------------------------------------
r108918 | svnadmin | 2011-03-23 00:47:18 -0500 (Wed, 23 Mar 2011) | 1 line
Changed paths:
A /KeyManagement/trunk (from /trunk/KeyManagement:108917)
D /trunk/KeyManagement
Move the KeyManagement
------------------------------------------------------------------------
:
다른 문제는 이것이다. 이전의 덤프 및로드에 대한 내 경험은 svndumpfilter
을 사용하여 /KeyManagement
과 /trunk/KeyMangement
을 동시에 덤프하고로드해야한다는 것입니다. 사실, 응용 프로그램이 완전히 다시되었고 아무도 코드를 신경 쓰지 않았기 때문에 나는 /trunk/KeyManagement
을 신경 쓰지 않습니다.
덤프의 첫 번째 개정판이 완전한 개정임을 이해합니다.나를 위해 이런 식으로 할 수 있습니까?
$ svnadmin dump -r108917:108918 old_repo > dump_file
$ svnadmin dump -r108103 --incremental old_repo >> dump_file #Revision with KeyManagement
$ svnadmin dump -r107429 --incremental old_repo >> dump_file #Revision with KeyManagement
...
$ svnadmin load --parent-dir new_repo < dump_file
그리고 KeyManagement와 관련이있는 개정을 그냥 덤프하십시오. 나는 /trunk
의 버전에 대해서는 상관하지 않는다. 이 프로젝트는 그 후 완전히 수정되었습니다. 수정 내용을 알고 있으므로이 작업을 수행하기위한 쉘 스크립트를 쉽게 작성할 수 있습니다. KeyManagement와 관련이있는 개정에는 다른 프로젝트가 포함되어 있지 않습니다.
나는 이것을하기 위해 40 시간 이상을 보내고 싶지 않습니다.
섬망의 권리 :'svnrdump dump URL/Of/KeyManagement'을 시도 했습니까? –
'svnrdump'를 시도하지 않았습니다. 사실,'svn','svnadmin','svnlook','svndumpfilter','svnversion','svnsync','svnserve'가있는 Mac에서는 찾을 수 없었습니다. 아니오,'svnrdump'는 다른 모든 Subversion 명령과 동일한 1.7.10 릴리스와 함께'/ Applications/Xcode.app/Contents/Developer/usr/bin'에 있습니다. '/ usr/bin' 전에 내 경로에있는'/ usr/local/bin'에 그것들 모두를 링크 할 것입니다. –
이전에'svnrdump'를 사용하지 않았습니다. 상당히 새로운 도구이며'svndump'와는 약간 다르게 작동하는 것처럼 보입니다. svnrdump가 동시에 필터와 덤프를 수행하는 것처럼 보입니다. –