2014-08-27 2 views
4

원래 질문은 아래와 같습니다. 나는 이것을 작동시킬 수 있는지 알아보기 위해 몇 가지 시도를 해왔다.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 시간 이상을 보내고 싶지 않습니다.

+0

섬망의 권리 :'svnrdump dump URL/Of/KeyManagement'을 시도 했습니까? –

+0

'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'에 그것들 모두를 링크 할 것입니다. –

+0

이전에'svnrdump'를 사용하지 않았습니다. 상당히 새로운 도구이며'svndump'와는 약간 다르게 작동하는 것처럼 보입니다. svnrdump가 동시에 필터와 덤프를 수행하는 것처럼 보입니다. –

답변

0

드디어 svnrdump를 사용했습니다. 나는 모든 개정판을 버려야 만했다. 그러나 나는 오직/KeyManagement 만 원한다고 명시 할 수 있었다. svndumpsvndumpfilter을 사용하면 원래 프로젝트가 있었던 곳이기 때문에 /KeyManagement/trunk/KeyManagment을 지정해야합니다.

불행히도 svnrdumpsvndumpfilter을 사용할 수 없으며 모든 수정본이보고되었으므로 다시 번호를 매길 수없고 비어있는 숫자는 삭제할 수 없습니다.

여전히 svnrdump은 위치를 변경할 수 없거나 빈 개정 및 번호를 건너 뛰지 않아도 하나의 디렉토리 만 캡처하도록 허용했습니다.

+0

하나의 디렉토리를 별도의 저장소에로드 한 후에는 빈 저장소를 최종 목적지에로드하기 전에'svndump'를 사용하여 빈 저장소를 다시 덤프 할 수 있습니다. 즉, 단일 디렉토리의 초기 개정이 조금 더 작다고 가정합니다. 또한 나중에 다시 물릴지도 모른다는 것을 알았을 때 새로운 repro에서 UUID를 변경하는 것을 잊지 마십시오. – AVee

+0

Nope. 일하지 않았어. 나는 실제로 그렇게했다. 'svndumpfilter'는 모든 트랜잭션이 단지 커밋 메시지이거나'/ KeyMangement' 프로젝트이기 때문에 아무것도 필터링하지 않았습니다. 그런 다음'svnadmin load'는 빈 커밋이 없어 커밋의 번호를 다시 매기지 않습니다. 'svnrdump'와'svndump'가 같은 형식을 사용하거나'svndumpfilter'가 _type 3_ repo 덤프에서 작동하면 좋을 것입니다. –

관련 문제