2010-01-07 9 views
4

안녕하세요 저는 최대 크기를 지정하여 저장소의 크기를 제한하고 싶습니다. 그러나 그렇게하는 데 필요한 정보는 찾을 수 없습니다. 기술적으로 가능합니까?Subversion 저장소의 한도 크기

편집 : 미안하지만 명확하지 않은 경우 죄송합니다. 필자는 패치를 계속 유지할 수있는 기능적 저장소를 유지하려고하지만 적어도 하나 이상의 최신 개정판이있는 문서의 가장 오래된 개정판은 자동으로 제거되어 sizelimit 내에 유지됩니다. 오래된 명령이 제거되었으므로 (이상적으로 커밋 메시지를 보관하고 있기 때문에) 약 67 개정을 되돌릴 수 있다고 말하십시오.

+0

"quotas"를 찾으셨습니까? –

+0

크기 한도를 초과하면 어떻게 될까요? 저장소는 영원히 나머지 부분에 대해 읽기 전용이됩니까? – fennec

+0

흥미 롭습니다. 나는 당신이 서버에서 커밋 된 훅을 조사 할 것을 제안한다. 수동으로 약간의 작업을해야합니다 (즉, 직접 크기를 계산하고 커밋을 거부합니다). –

답변

13

이렇게하는 것은 저장소에서 중요한 수술입니다. 실제 리포지토리에서이 작업을 수행하기 전에 수행중인 작업을 완전히 알고 있는지 확인하십시오.

개별 파일에 대해 수행 한 작업을 수행 할 수 없지만 전체 저장소에서이 작업을 수행 할 수 있습니다. 당신이해야 할 일은 저장소의 히스토리 꼬리를 잘라 버리는 것입니다.

리포지토리에 5000 개의 리비전이 있고 가장 오래된 1000 개의 리비전을 자르면 가장 최근 4000 개의 리비전 만있는 리포지토리가 생성됩니다.

이렇게하면 덤프/복원주기가 필요합니다. 즉, 작업하고 리포지토리를 다시 작성하는 동안 리포지토리에 대한 쓰기 권한을 비활성화해야합니다.

저장소를 탐색 할 때 여전히 볼 수있는 파일은 손실되지 않지만 특정 파일의 기록이 완전히 손실 될 수 있습니다 (모든 수정 사항이 처음 1000 개 개정에 포함 된 경우).분명히 초기 개정 중 하나에서 파일이 삭제 된 경우 잘라낸 후에 파일을 다시 가져올 수 없습니다.

또한이 작업을 수행하는 순진한 방법은 0부터 시작하는 모든 개정 번호의 번호를 다시 매겨 둡니다. 위의 예에서, 개정 5000은 절단 후 개정 4000이됩니다. 이것이 문제가되는 경우 추가 작업을해야합니다.

그래서, 우리는의 earlist 1000 버전을 잃고 싶지 가정, 기본 워크 플로우는 다음과 같습니다

  1. 저장소를 오프라인 (또는 적어도이 읽기 전용으로 만들)
  2. 실행 svnadmin dump [repository path] -r 1000:HEAD > repository.dump합니다. 이것은 1000 이후 버전의 리비전 만 포함하는 덤프 파일을 작성합니다. 이 아니고 --incremental 플래그를 사용하면 덤프 파일의 첫 번째 개정판에는 리비전 1000을 볼 때 저장소의 전체 덤프가 포함됩니다 (모든 히스토리 제외).
  3. svnadmin create으로 깨끗한 저장소를 만들고 이전 저장소에서 conf & 후크 디렉토리를 복사하십시오.
  4. svnadmin load [new repository path] < repository.dump을 실행하여 최신 개정판을로드하십시오.
  5. 이전 저장소를 다른 곳으로 옮기고 (백업을 위해 보관하십시오) 새 저장소를 해당 위치로 이동하십시오.

리비전 번호를 보존하려면 어딘가에서 빈 리비전을로드해야합니다. 리비전 1 : 999를 별도의 덤프 파일로 덤프 한 다음 svn dumpfilter를 사용하여 모든 것을 제거한 다음 비어있는 리비전을로드하고 원하는 리비전을로드하면됩니다. 조금 비웃음이지만, 거기서 당신을 데려 올 것입니다. 예를 위해 (당신이 필요로하는 크기로

  • 설정 할당량 제한 (> ... -> 속성 - -> 드라이브 내 컴퓨터)를

  • +0

    그 해답에 놀라운 노력을 가져 주셔서 감사합니다. – svandragt

    1

    사전 커밋 후크에서 저장소가 한도를 초과하면 트랜잭션을 "중단"할 수 있습니다.

    +0

    ID는 모든 새 트랜잭션을 처리하지만 이전 버전의 파일을 손실하지 않고 이전 버전을 제거하려고합니다. – svandragt

    +0

    @Pacifika : 서버 측에서 이러한 종류의 작업을 수행하려면 데몬/cron 작업이 필요합니다. 이 프로세스를 "커밋 후크"를 통해 "게이트/트리거"할 수 있습니다. – jldupont

    +0

    ... 이유없이 의견이없는 채소 ???? – jldupont

    1

    이 작업을 수행하는 간단한 방법은 없습니다. 을 다시 빌드해야합니다. 리포지토리가 가장 오래된 버전을 삭제합니다. 이 작업을 수행하는 단일 SVN 명령은 없습니다. 당신이 필요로하는 과정은 대략 다음과 같습니다

    1. 이 (호스트에서만 수행 할 수 있습니다)를 svnadmin 덤프를 수행합니다.
    2. svndumpfilter을 사용하여 원하지 않는 버전을 필터링합니다.
    3. 새 저장소를 만들고 svnadmin로드을 사용하여 새 저장소에로드하십시오.

    link은이 전체 작업의 중요한 부분 인 svndumpfilter에 대한 정보를 제공합니다.

    다시 생각 :

    0

    당신이 그것을 할 수 없어 ... svndumpfilter에 파일/경로를 포함하거나 제외 할 수있는 제어 할 수 있습니다,하지만 난 그것을 개정을 통해 세밀하게 제어 할 수 있으므로 확실하지 않다. CVS 반대에 , subevrsion는 개정 당 전체 소스를 유지하지 않습니다 하지만 곧 버전 사이의 차이 (물론 조금 더 똑똑하지만,이 질문에 대한 중요하지) SVN의 모든 개정 이후

    +1

    CVS가 전체 소스를 유지 관리한다고 생각하지 않습니다 (차이점 만). – Tarydon

    1

    는 차이점을 기반으로 이전 버전의 경우 이전 버전을 "제거"할 방법이 없습니다. 어떤 이유로이 작업을 정말로 수행해야하는 경우 모든 작업을 수시로 내보내고 새 저장소로 다시 가져와야합니다.

    0
    1. 모든 NTFS 드라이브에 대한 할당량 제어를 사용
    2. SVN
    3. 을 위해 창을 사용자 계정을 만듭니다 , 20 Mb)
    4. 방금 ​​생성 한 계정으로 SVN 서버가 실행되도록 구성하십시오.
    5. 즐기십시오!