2009-03-25 5 views
9

TortoiseSVN을 사용하여 유지 관리하는 12 개 정도의 프로젝트가 포함 된 저장소가 증가했습니다 (완전히 새로운 기능이며 아직 기능을 알지 못함). 저장소를 보유해야하는 공간이 제한되어 있으므로 백업하고 이전 버전을 제거해야합니다. 예를 들어 프로젝트의 버전이 50 인 경우 50,49,48 만 유지하려고합니다.Subversion 저장소를 정리하는 가장 좋은 방법은 무엇입니까?

+2

번호 :

은 인용. – yfeldblum

+0

버전 관리의 요점을 더 잘 이해하려면 http://svnbook.red-bean.com/의 "버전 관리 (Subversion 포함)"책 (맥주처럼 무료)을 읽어야합니다. –

답변

1

설명하는 방식으로 특정 버전의 저장소를 "스닙 (snip)"할 방법이 없습니다. 당신이 할 수있는 일은 원하는 리비전의 전체 리파지토리 svn export입니다. 그런 다음 새 리포지토리로 가져온 다음 리비전의 커밋을 로그 파일에서 새 리포지토리로 다시 재생합니다. 이것은 사소한 것이 아닙니다.

또는 저장소에 어수선한 경로를 제외하려는 경우 저장소가있는 파일 시스템에 직접 액세스 할 수있는 경우 svnadminsvndumpfilter을 조합하여 원하는 경로를 선택할 수 있습니다. 다른 모든 것들을 치다.

당신이 묘사 한 것은 Subversion의 관점에 어느 정도 부합한다는 점에 유의하십시오. 모든 것을 유지해야합니다. 이 문제가 자주 발생하면 더 나은 체크인 방법을 고려하십시오. 또는 Git을 사용해보십시오. 이렇게하면 이러한 종류의 실험을 사실상 무료로 할 수 있습니다.

+0

Subversion의 브랜치 (svn copy)는 시간과 공간에서 거의 무료입니다. Subversion 1.6부터는 분기 간 패치 병합으로 표현 공유를 사용하여 데이터 중복을 방지합니다. 나는 "당신은 svn에서 가지가 공간 비싸다"고 말함으로써 당신이 무엇을 언급하고 있는지 전혀 모른다. –

+0

일반적으로 svn-dumpfilter를 사용하는 것은 git-filter-branch 및/또는 .git/info/grafts를 사용하는 것보다 훨씬 노동 집약적입니다. 더 많은 종류의 역사 편집을 지원하기 위해 svn-dumpfilter에 많은 패치를했는데 여전히 좋은 도구는 아닙니다. – emk

+0

@wcoenen : 네 말이 맞다. 나는 그 말을 전혀 잘 쓰지 않았다. @emk : 동의했다, 그것은 꽤 끔찍하다. 요즘 나는 주로 힘내를 사용합니다. –

12

오래된 버전을 제거하면 버전 관리가 어려워 지지만 유지하고 싶은 버전을 덤프 한 다음 새 repo에 넣고 이전 버전을 삭제하면됩니다.

svnadmin dump /path/to/current/repo -r48:50 > svn.dump 
svnadmin create /path/to/new/repo 
svnadmin load /path/to/new/repo < svn.dump 

또는 포함 svndumpfilter을 사용하여/당신이 원하는 특정 비트 등을 제외이 또한 유용하게 사용할 수 removal에 대한 SVN 자주 묻는 질문에 약간의 정보.

+0

리비전 48에서 50까지 특정 커밋 * 만 덤프 할 수 있습니까? 나는 리비전 48의 리포지터리 상태를 찾고 있다고 생각한다. –

+0

방금 ​​시도했습니다. 이것은 OP가 전혀 원하지 않는다고 생각하는 것을 수행하지 않습니다. 즉, 수정본의 커밋 만 가져옵니다. 당신은 "리비전 48에 리파지토리의 상태를 얻지 않고 리비전 50으로 가져 오는 데 필요한 모든 커밋을 따르게됩니다." –

+0

John : 어떻게 지내세요? 그것은 나를 위해 잘 작동합니다. 지정한 첫 번째 버전을 완전히 덤프 한 다음 지정된 마지막 버전까지 커밋합니다. "--deltas"스위치를 지정한 경우에만 커밋을 덤프합니다. –

4

저장 용량을 늘리기 위해 이전 버전이나 저장소를 삭제할 수 있습니까?

짧은 대답은 아니오입니다. Subversion과 CVS의 작동 방식은 삭제 된 파일, 바이너리 파일 등 모든 변경 사항을 유지한다는 것입니다. 각 개정 본은 마지막 개정판에 따라 달라 지므로 중간에있는 개정판을 자르거나 저장소가 손상되었습니다. 공간이 부족할 경우 할 수있는 두 가지 일이 있습니다 : 1) 모듈을 삭제하고 HEAD 개정판을 사용하여 다시 작성하십시오. 그러면 모든 이전 개정이 지워집니다 (그러나 커미트 이력은 유실됩니다). 2) 더 나은 옵션 - 높은 계획으로 업그레이드하십시오 :-). Git은 서버 측 저장소 요구량이 훨씬 적기 때문에 Git에서 문제가되지 않습니다.

저장소의 기록에서 파일을 완전히 제거하려면 어떻게해야합니까?

파일이나 커밋의 모든 증거를 삭제하려는 경우가 있습니다. 아마도 누군가 Subversion이 기밀 문서를 실수로 저지른 것 같습니다. Subversion은 의도적으로 정보를 잃지 않도록 설계 되었기 때문에 그렇게 쉬운 것은 아닙니다. 수정은 서로를 기반으로하는 불변의 나무입니다. 히스토리에서 리비전을 제거하면 도미노 효과가 발생하여 모든 후속 리비전에 혼란이 발생하고 모든 작업 복사본이 무효화 될 수 있습니다.

그러나 프로젝트는 정보를 영구적으로 삭제하는 작업을 수행하는 svnadmin 절멸 명령을 언젠가 구현할 계획이 있습니다. (문제 516을보십시오.)

그동안 유일한 svnadmin은 저장소를 덤프 한 다음 svndumpfilter (잘못된 경로 제외)를 통해 덤프 파일을 svnadmin load 명령으로 파이프합니다. 이에 대한 자세한 내용은 Subversion 책의 5 장을 참조하십시오. 더 큰 공간으로 저장소를 이동

http://subversion.apache.org/faq.html#removal

http://codesion.com/benefits/faq.htm#deleterevisions

관련 문제