SVN에서 삭제 된 파일을 복원하는 올바른 방법은 무엇입니까?


119

리포지토리에서 파일을 삭제했고 이제 다시 되돌리고 싶습니다. 내가 알아낼 수있는 최선의 방법은 다음과 같습니다.

  • 삭제하기 전에 개정판으로 업데이트
  • 파일을 다른 곳에 복사
  • 머리에 업데이트
  • 파일을 다시 복사
  • 그들을 추가
  • 범하다

그것은 단지 나쁜 냄새가 나고 모든 역사를 잃어 버립니다. 더 나은 방법이 있어야합니다. 나는 이미 The SVN Book을 보았지만 아무것도 찾지 못했고 지금 SVN 태그 목록을 찾고 있습니다.


4
확실히 tukushan의 대답은 귀하의 질문에 대한 정확한 직접 응답이며 받아 들여야합니까?
James McCormack

@JamesMcCormack : 그의 답변에서 NB를 참조하십시오.
BCS

2
팁, 파일을 삭제하고 아직 변경 사항을 적용하지 않은 경우 마우스 오른쪽 버튼을 클릭하고 업데이트하면 파일이 복구됩니다.
Hammad Khan

답변:


57

svn merge 사용 :

svn merge -c -[rev num that deleted the file] http://<path to repository>

예 :

svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
             ^ The negative is important

TortoiseSVN (내 생각에 ...)

  • Explorer에서 마우스 오른쪽 버튼을 클릭하고 TortoiseSVN-> Merge ...로 이동합니다.
  • "수정 범위 병합"이 선택되어 있는지 확인하고 다음을 클릭합니다.
  • "병합 할 개정 범위"텍스트 상자에서 파일을 제거한 개정을 지정하십시오.
  • "역 병합"확인란을 선택하고 다음을 클릭합니다.
  • 병합을 클릭하십시오.

그러나 그것은 완전히 테스트되지 않았습니다.


OP 편집 : 이것은 TortoiseSVN의 내 버전에서 작동합니다 (다음 버튼이없는 이전 종류).

  • 항목이 삭제 된 폴더로 이동
  • Explorer에서 마우스 오른쪽 버튼을 클릭하고 TortoiseSVN-> Merge ...로 이동합니다.
  • 에서 에서 부분 삭제했다 개정을 입력
  • 로의 섹션을 삭제하기 전에 수정을 입력합니다.
  • "병합"을 클릭하십시오.
  • 범하다

트릭은 거꾸로 병합하는 입니다. 했네 sean.bright 올바른 방향으로 날을 가리키는합니다!


편집 : 우리는 다른 버전을 사용하고 있습니다. 내가 설명한 방법은 TortoiseSVN 버전에서 완벽하게 작동했습니다.

또한 커밋에 여러 변경 사항이있는 경우 역 병합하는 경우 커밋하기 전에 병합이 완료되면 다른 변경 사항을 되돌리고 싶을 것입니다. 그렇지 않으면 이러한 추가 변경 사항도 취소됩니다.


Windows에 있고 SVN의 CLI 버전이 없습니다. ortoiseSVN이 그렇게하는 방법을 알고 있습니까?
BCS

Tortoise는 오른쪽 클릭 메뉴에 "병합"이 있습니다. 개정판을 입력 할 상자가 있습니다. 또한 "Dry Run"을 사용하여 올바르게 설정되었는지 확인하십시오. 그리고 결과는 커밋 할 때까지 계산되지 않습니다. 모든 것이 잘못되면 되돌릴 수 있습니다.
gbarry

OP에 Tortoise의 이전 버전이 있다고 말하고 싶습니다. 새로운 것에는 다른 (열등한) 병합 대화 상자가 있습니다
1800 INFORMATION

나는 아직 좋지 않은 병합 시스템을 보지 못했습니다. 텍스트, 파일, 디렉토리, Word 문서, yuck. 해결할 수있는 문제가 아니라고 생각합니다. OTOH는 더 많거나 적을 수 있습니다. :)
BCS

1
여러 파일을 되 돌린 다음 되 돌리면 되돌림 중 하나가 되 돌리지 않습니다. 아야! 난 그냥 뭔가 다쳤어.
BCS

176

Sean Bright가 제안한 svn 병합을 수행하는 문제는 삭제와 동일한 개정판에서 다른 변경 사항을 다시 도입한다는 것입니다. svn 복사본은 삭제 된 파일에만 영향을 미치는보다 구체적인 작업입니다.

Tortoise SVN을 사용하면 다음과 같이 svn 복사본을 통해 작업 복사본 디렉터리와 이후 SVN 개정판에서 삭제 된 파일을 부활시킬 수 있습니다.

  • 이전에 파일이 포함 된 작업 복사본 폴더를 찾습니다.
  • 탐색기에서 폴더를 마우스 오른쪽 버튼으로 클릭하고 TortoiseSVN-> 로그 표시로 이동합니다.
  • 파일을 삭제 한 개정판 바로 앞의 개정 번호를 마우스 오른쪽 버튼으로 클릭하고 "저장소 찾아보기"를 선택합니다.
  • 삭제 된 파일을 마우스 오른쪽 버튼으로 클릭하고 "작업 복사본으로 복사 ..."를 선택하고 저장합니다.

삭제 된 파일은 이제 작업 복사본 폴더에 있습니다. 다시 SVN에 다시 추가하려면 복원 된 파일을 마우스 오른쪽 버튼으로 클릭하고 SVN Commit을 선택합니다.

주의 :이 방법은 복원 된 파일의 이전 기록을 보존하지만 TortoiseSVN 로그에서 이전 기록을 보려면 로그 메시지 대화 상자에서 "복사 / 이름 변경시 중지"가 선택 해제되어 있는지 확인해야합니다.


26
이 작업은 서버에서 직접 수행 할 수도 있습니다. 삭제 된 파일이나 폴더가 상당히 큰 경우 유용합니다. svn cp -r 1993 http://example.com/svn/trunk/path@1993 http://example.com/svn/trunk/path
Craig

이것이 올바른 방법입니다. TortoiseSVN 1.8.1로 방금 시도했으며 권장대로 작동합니다.
Dr. Gianluigi Zane Zanettini

완전한!! 간단하고 효과적입니다. 솔루션을 주셔서 감사합니다
헌터

이 방법을 사용하면 상위 분기에서 삭제 된 하위 분기로 파일을 훨씬 쉽게 복원 할 수 있습니다. 을 (를) 사용하는 방법이있을 수 merge있지만 알아 내지 못했습니다.
arr_sea

3 단계의 "바로 이전"이 중요합니다. 4 단계에서 Tortoise는 Windows 삭제를 사용하여 파일을 삭제했지만 파일이 이미 존재한다고 계속 불평했습니다. 먼저 작업 복사본을 업데이트해야했습니다. (제 동료가 Tortoise 삭제를 사용하여 여러 파일을 삭제 한 다음 변경 사항을 커밋했습니다.) TortoiseSVN 1.8.1.
leqid


16

Tortoise SVN 복사 기능을 사용하여 커밋 된 변경 사항을 되돌립니다.

  1. 삭제 된 파일 / 폴더가 포함 된 상위 폴더를 마우스 오른쪽 버튼으로 클릭합니다.
  2. "로그 표시"를 선택하십시오.
  3. 변경 / 삭제가 완료된 이전 버전을 선택하고 마우스 오른쪽 버튼으로 클릭합니다.
  4. "저장소 찾아보기"를 선택하십시오.
  5. 복원 할 파일 / 폴더를 선택하고 마우스 오른쪽 버튼을 클릭하십시오.
  6. 파일 / 폴더를 헤드 개정판에 복사 할 "복사 위치"를 선택하십시오.

도움이되는 희망


13

나는 항상 svn copy를 서버 작업으로 사용하는 것처럼 보이므로 두 개의 작업 경로에서 작동하는지 확실하지 않습니다.

다음은 삭제 된 파일을 프로젝트의 로컬 작업 복사본으로 복원하는 예입니다.

svn copy https://repos/project/modules/module.js@3502 modules/module.js

프로젝트 디렉토리 안에있는 동안. 이것은 전체 디렉토리를 복원 할 때도 작동합니다.


2
+1 @ 사본이 작동했습니다. 복사 -r은 Mac OSX에서 CollabNet svn 1.6.17을 사용할 때 작동하지 않는 것 같습니다.
Gray

2
또한 사용 된 개정판 은 삭제 직전 개정판이어야합니다 .
회색

6

Tortoise SVN을 사용하는 경우 해당 개정판에서 작업 복사본으로 변경 사항을 되 돌린 다음 (효과적으로 역 병합 수행) 파일을 다시 추가하기 위해 다른 커밋을 수행 할 수 있어야합니다. 따라야 할 단계는 다음과 같습니다.

  1. 작업 복사본에서 파일을 삭제 한 폴더를 찾습니다.
  2. repo-browser로 이동하십시오.
  3. 파일을 삭제 한 개정판을 찾습니다.
  4. 변경 목록에서 삭제 한 파일을 찾습니다.
  5. 파일을 마우스 오른쪽 버튼으로 클릭하고 "이 개정판에서 변경 사항 되돌리기"로 이동합니다.
  6. 그러면 파일이 작업 복사본으로 복원되고 기록이 유지됩니다.
  7. 파일을 커밋하여 저장소에 다시 추가합니다.

그렇다면 문제는 방금 설명한 작업을 수행하는 방법이었습니다. (답변 : 뒤로 병합 사용)
BCS

1
Tortoise SVN에서하는 방법에 대해 이야기하고있었습니다. 자세한 내용을 추가하겠습니다.
davogones

5

파일을 복원하고 수정 내역을 잃지 않는 가장 쉬운 방법은 SVN copy를 사용 하는 것입니다. 위의 병합 예제는 동일한 작업을 수행하는 더 복잡한 방법 인 것 같습니다. 단순히 개정을 복원 하려는데 병합이 필요한 이유는 무엇입니까?

이 경우 다음을 사용하고 꽤 잘 작동합니다.

svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs

나는 항상 svn copy서버 작업 으로 사용 하는 것처럼 보이 므로 두 작업 경로에서 작동하는지 확실하지 않습니다.


3
SVN COPY는 권장되는 접근 방식입니다. 구문은 매우 간단합니다. svn copy [SVN URL] @ [REVISION # WHERE FILE EXISTS] [LOCAL PATH TO RESTORE TO] from visualsvn.com/support/svnbook/branchmerge/basicmerging . 이것을 직접 사용했습니다.
amit

이것은 나에게 가장 적합한, 나는 또한이 방법을 사용
드미트리 Pashkevich

4

거북이 SVN :

변경 사항을 아직 커밋하지 않은 경우 파일 또는 디렉터리를 삭제 한 상위 폴더에서 되돌릴 수 있습니다.

삭제 된 파일을 이미 커밋 한 경우 저장소 브라우저를 사용하여 파일이 여전히 존재하는 개정으로 변경 한 다음 상황에 맞는 메뉴에서 복사 위치 ... 명령을 사용할 수 있습니다. 작업 복사본의 경로를 대상으로 입력하면 삭제 된 파일이 저장소에서 작업 복사본으로 복사됩니다.


좋은. 다음에해볼 게요.
BCS

1

복원하려는 파일 하나만 체크 아웃 할 수 있어야합니다. 파일이 존재했던 마지막 개정이 svn co svn://your_repos/path/to/file/you/want/to/restore@rev어디에 있는지 같은 것을 시도하십시오 rev.

나는 얼마 전에 정확하게 이것을해야했고, 내가 올바르게 기억한다면, 작동하지 않는 -r옵션을 사용했다 svn. :rev구문 을 사용해야했습니다 . (거꾸로 기억했을지 모르지만 ...)


그것은 내가 원하는 것이 아닙니다. 파일을 repo로 다시 패치하고 SVN이 동일한 파일임을 알고 싶습니다.
BCS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.