내 SVN 저장소에서 수정본을 삭제하려고합니다


33

내 코드 저장소의 최신 개정판이 손상되어 내 앱이 불안정 해졌습니다. 이전 버전으로 되돌리고 싶습니다.

그러나 작업 사본에 단순히 '복귀'를 사용하고 싶지 않습니다. 실제로 리포지토리 이전에 헤드 리비전과 여러 리비전을 삭제하여 리포지토리를 이전 리비전으로 '복귀'하여 헤드 리비전이됩니다. 내가 어떻게 할 것인지 아는 사람 있습니까?


1
이전 개정을 실제로 삭제할 수 없으며 Felix가 언급 한대로 변경 사항을 취소하고 커밋하기 만하면됩니다. 흥미로운 부가 정보, Git (및 다른 버전 제어 솔루션)을 사용하면 실제로 개정판을 실제로 삭제할 수 있습니다.
davr

3
예, svnadmin으로 SVN 저장소에 액세스하면됩니다. 아래 답변을 참조하십시오.
마틴

davr은 기술적으로 옳습니다. 당신이 설명하는 것은 나쁜 수정본을 제외한 모든 수정본을 버린 다음 이전 리포지토리 위에 버리는 것입니다. 내 생각에 그것은 개정판을 '삭제하는'것과 같은 것이 아닙니다.
Sirex

답변:


12

이 링크가 도움이 될 수 있습니다.

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

인용문:

  1. 작업 복사본 전체를 롤백한다고 가정하면 작업 복사본 내 최상위 디렉토리로 변경하십시오.

  2. svn revert작업 복사본의 파일을 마지막 커밋 / 체크 아웃 상태로 되돌리려면 실행 합니다.

  3. svn status -v작업 복사본이 현재 어떤 개정 번호에 해당하는지 확인 하려면 실행 합니다 (목록에서 가장 높은 개정 번호 임 svn status -v).

  4. 실행 svn merge -rXX:YY어디 XX이전 단계에서 얻을 수이고 YY당신이 되돌리려 개정의 수입니다.

  5. 끝난! 이에 대한 가능한 예외는 수정본 YY이 원래 만들어 졌을 때 존재하지 않았던 작업 복사본의 파일 이 여전히 존재한다는 것입니다. 기본적으로 svn은 항목을 제거하지 않기 때문입니다. 당신이 그들을 제거하려면, 그들 svn del [filename]각각에 실행 합니다.

  6. 잘 했어! 이제 모든 중간 편집이 수행되지 않은 것처럼 작업 복사본으로 재생하십시오. 노력할 준비가되면 평소처럼 svn commit을 사용하십시오!


1
Windows Os에서 옵션 # 4 svn merge -rXX:YY .는 현재 디렉토리를 참조하기 위해 줄 끝에 점을 두어야합니다. TortoiseSVN에는 리버스 병합 옵션이 있습니다.
Shantha Kumara

3
이것은 실제로 "이전 개정, 헤드 수정이 될 것"으로 되돌아 가지 않습니다. 이전 개정판을 HEAD로 만들지는 않습니다. 오히려 새로운 HEAD를 생성합니다. 마틴의 답변을 참조하십시오.
Matthew Flaschen

후행 기간에 대한 Shantha의 의견을 포함하도록 답변을 수정했습니다. * nix에서도 마찬가지입니다.
Mike Kormendy 17

72

이것은 나를 위해 일했습니다. HEAD로 1234 개정판이 있고 마지막 3 개의 커밋을 되돌리려면 다음을 수행하십시오.

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. 당신은 질문을 이해하고 구체적인 답변을 한 유일한 사람입니다.
Matthew Flaschen

6
이것은 기술적으로 정답입니다. 그러나이 작업은 복잡한 작업이 아니라 체크 아웃 된 모든 복사본을 무효화 할 것이므로 리포지토리를 사용하는 모든 사람에게 경고해야합니다.
sleske

1
빠르고 쉽게 그리고 요점과 실제로 포스터가 요구 한 것을
unc0nnect4

7
리포지토리 UUID를 새 리포지토리로 복사해야하는 한 (이전 리포지토리의 "svn info"의 UUID에서 복사 한 "svnadmin setuuid"참조) 잘라낸 개정으로 업데이트 된 체크 아웃 만 무효화되다
Bryan Petty 2016 년

1
새로운
저장소

5

나는 이것이 오래된 질문이라는 것을 알고 있지만 Windows / TortoiseSVN 으로이 작업을 수행하는 방법을 찾았습니다.

의견에서 제안한 것처럼 개정을 "삭제"할 수 없지만 되돌릴 수있는 개정과 동일한 최신 개정을 작성하면됩니다.

  1. 개정을 되돌리려는 디렉토리에 대한 저장소의 HEAD를 체크 아웃하십시오.
  2. 되돌리려는 최상위 디렉토리 (예 : "Trunk")에 대해 TortoiseSVN에 "로그 표시"보기를로드하십시오.
  3. 제거 할 개정을 마우스 오른쪽 단추로 클릭하십시오. 참고 : 이것은 되돌리고 자하는 개정이 아니라 제거하려는 개정입니다.
  4. "이 개정판에서 변경 사항 되돌리기"를 선택하십시오.
  5. 프롬프트에서 "예"를 클릭하십시오.
  6. 정상적으로 체크 아웃을 업데이트하지만 "HEAD"로 업데이트하십시오.
  7. 다시 커밋하십시오.

그런 다음 체크 아웃 한 다른 모든 사람에게 가서 업데이트하도록하고 새 파일을 제거해야합니다.

또한 모든 사람이 해당 개정판이 무엇인지 알고 잠재적으로 설명을 업데이트해야합니다.


일반적인 "복귀"절차와 다른 점은 무엇입니까?
Tomer W

되돌리기는 작업 사본을 저장소에있는 내용으로 변경합니다 ... 이것은 보고서의 HEAD가 이전 커밋 상태를 반영하는 방법입니다.
Martin

1
이 주셔서 감사합니다 -이 거북이 SVN 방법을하는 내가 :) 잘못된 되돌릴 저지하기 위해 필요한 것을 막습니다
박사 앤드류 버넷 - 톰슨에게

또한 로그 창에 컨텍스트 메뉴 항목 " 이 버전으로 되돌리기 "가 있습니다.
Uwe Keim

4

이 목적으로 덤프 /로드를 사용할 수 있습니다.

svnsync를 사용하여 일부 버전으로 백업 할 수도 있습니다.

큰 저장소가 있으면 시간이 걸립니다.


3

나를 위해 (VisualSVN, 30-HEAD) 다음과 같이 작동합니다.

  델 C : \ Repositories \ MyRepo \ revs \ 0 \ 30
  델 C : \ Repositories \ MyRepo \ revs \ 0 \ 29
  델 C : \ Repositories \ MyRepo \ revs \ 0 \ 28
  델 C : \ Repositories \ MyRepo \ revprops \ 0 \ 30
  델 C : \ Repositories \ MyRepo \ revprops \ 0 \ 29
  델 C : \ Repositories \ MyRepo \ revprops \ 0 \ 28
  에코 27> C : \ Repositories \ MyRepo \ db \ current
  


이것은 다른 답변보다 어떻게 낫습니까?
Toto

훨씬 빠릅니다.
Anton Golikhoff

0

터미널로 이동하여 svn 담당자로 이동하십시오.

svn update -r "복귀하려는 개정 번호"


2
슈퍼 유저에 오신 것을 환영합니다! 질문을주의 깊게 다시 읽으십시오. 귀하의 답변은 원래 질문에 대한 답변이 아닙니다 . OP는 "작업 사본에서 단순히 '되돌리기'를 사용하고 싶지 않다"고 말합니다
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.