SVN에서 삭제 된 파일을 복원하는 올바른 방법은 무엇입니까?
-
20-08-2019 - |
문제
Repo에서 파일을 삭제했는데 이제 다시 넣고 싶습니다. 내가 알아낼 수있는 최선은 다음과 같습니다.
- 삭제 전에 개정판으로 업데이트하십시오
- 다른 곳에서 파일을 복사하십시오
- 헤드로 업데이트
- 파일을 다시 복사하십시오
- 추가하십시오
- 저지르다
그것은 단지 나쁜 냄새가 나고 모든 역사를 느슨하게합니다. 이 작업을 수행하는 더 좋은 방법이 있어야합니다. 나는 이미 바라 보았다 SVN 책 그러나 아무것도 찾지 못했고 이제는 SVN 태그 목록을 내려다보고 있습니다.
해결책
SVN 병합 사용 :
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로 이동하십시오 ...
- "다양한 개정판 병합"이 선택되었는지 확인하고 다음을 클릭하십시오.
- "수정 범위를 병합하기"텍스트 상자에서 파일을 제거한 개정판을 지정합니다.
- "Reverse Merge"확인란을 확인하고 다음을 클릭하십시오.
- 병합을 클릭하십시오
그러나 그것은 완전히 테스트되지 않았습니다.
OP에 의해 편집 됨: 이것은 내 버전의 TortoisesVN (다음 버튼이없는 이전 종류)에서 작동합니다.
- 물건이 대감 된 폴더로 이동하십시오
- Explorer를 마우스 오른쪽 버튼으로 클릭하고 TortoisesVN-> Merge로 이동하십시오 ...
- 에서 에서 섹션 삭제 한 개정판을 입력하십시오
- 에서 에게 섹션 삭제 전에 개정을 입력합니다.
- "병합"을 클릭하십시오.
- 저지르다
트릭은 병합하는 것입니다 뒤로. kudos to Sean.bright 올바른 방향으로 나를 가리키기 위해!
편집하다: 우리는 다른 버전을 사용하고 있습니다. 내가 설명한 방법은 내 버전의 TortoisesVn과 완벽하게 작동했습니다.
또한 커밋에 여러 번의 변경 사항이있는 경우 리버스 병합이 발생하면 커밋하기 전에 병합이 완료되면 다른 변경 사항을 되돌릴 것입니다. 그렇지 않으면 추가 변경 사항도 반전됩니다.
다른 팁
Sean Bright가 제안한대로 SVN 병합의 문제는 삭제와 동일한 개정판에서 다른 변경 사항을 재 도입한다는 것입니다. SVN 사본은 삭제 된 파일에만 영향을 미치는보다 타겟팅 된 작업입니다.
Tortoise SVN을 사용하면 다음과 같이 SVN 사본을 통해 작업 카피 디렉토리와 이후 SVN 개정판에서 삭제 된 파일을 부활시킬 수 있습니다.
- 이전에 파일을 포함했던 작업 카피 폴더로 찾아보십시오.
- Explorer의 폴더를 마우스 오른쪽 버튼으로 클릭하고 TortoisesVN-> 로그 표시로 이동하십시오.
- 파일을 삭제 한 개정 직전 개정 번호를 마우스 오른쪽 버튼으로 클릭하고 "저장소 찾아보기"를 선택하십시오.
- 삭제 된 파일을 마우스 오른쪽 버튼으로 클릭하고 "작업 복사본 복사 ..."를 선택하고 저장하십시오.
삭제 된 파일은 이제 작업 카피 폴더에 있습니다. SVN에 다시 다시 구매하려면 복원 된 파일을 마우스 오른쪽 버튼으로 클릭하고 SVN 커밋을 선택하십시오.
NB :이 방법은 복원 된 파일의 이전 기록을 보존하지만 TortoisesVN 로그의 이전 기록을 확인하려면 로그 메시지 대화 상자에서 "Copy/Rename의 정지"가 확인되지 않도록해야합니다.
완전성을 위해, 이것은 당신이 SVN 책에서 찾은 것입니다. 당신이 무엇을 찾아야하는지 알고있었습니다. 이미 발견 한 것입니다.
가장 최근의 (그리고 상세한) 책의 책에서도 마찬가지입니다.
Tortoise SVN 복사 기능을 사용하여 커밋 된 변경 사항을 되돌립니다.
- 삭제 된 파일/폴더가 포함 된 상위 폴더를 마우스 오른쪽 버튼으로 클릭하십시오.
- "로그 표시"를 선택하십시오.
- 변경/삭제가 완료된 버전을 선택하고 마우스 오른쪽 버튼으로 클릭하십시오.
- "브라우즈 리포지토리 찾기"를 선택하십시오.
- 복원 해야하는 파일/폴더를 선택하고 마우스 오른쪽 버튼으로 클릭하십시오.
- 파일/폴더를 헤드 개정에 복사하는 "복사"를 선택하십시오.
도움이되기를 바랍니다
항상 SVN 사본을 서버 작업으로 사용하는 것 같습니다. 두 개의 작업 경로에서 작동하는지 확실하지 않습니다.
다음은 삭제 된 파일을 프로젝트의 로컬 작업 사본으로 복원하는 예입니다.
svn copy https://repos/project/modules/module.js@3502 modules/module.js
프로젝트 디렉토리에있는 동안. 이것은 전체 디렉토리를 복원하는데도 좋습니다.
Tortoise SVN을 사용하는 경우 해당 개정에서 작업 사본 (효과적으로 리버스 머지를 수행)으로 변경 사항을 되돌릴 수 있어야합니다. 다음 단계는 다음과 같습니다.
- 파일을 삭제 한 작업 사본의 폴더로 찾아보십시오.
- Repo-Browser로 이동하십시오.
- 파일을 삭제 한 곳에서 개정을 찾아보십시오.
- 변경 목록에서 삭제 한 파일을 찾으십시오.
- 파일을 마우스 오른쪽 버튼으로 클릭하고 "이 개정판에서 변경 사항을 되돌리십시오"로 이동하십시오.
- 이렇게하면 파일을 동작을 유지하면서 작업 사본으로 복원합니다.
- 파일을 저장하여 저장소에 다시 추가하십시오.
와 함께 거북이 SVN:
아직 변경 사항을 커밋하지 않은 경우 파일이나 디렉토리를 삭제 한 상위 폴더에서 되돌릴 수 있습니다.
이미 삭제 된 파일을 커밋 한 경우 리포지토리 브라우저를 사용하여 파일이 존재하는 개정판으로 변경 한 다음 Context 메뉴에서 명령 사본을 사용할 수 있습니다. 대상이 대상으로 작업 사본의 경로를 입력하면 삭제 된 파일이 저장소에서 작업 사본으로 복사됩니다.
파일을 복원 할 수 있었고 개정 내역을 잃지 않는 가장 쉬운 방법은 사용하는 것입니다. SVN 사본, 위의 합병 예는 같은 것을 달성하는 더 복잡한 방법처럼 보입니다. 단순히 개정을 복원하고 싶을 때 합병 해야하는 이유는 무엇입니까?
나는이 인스턴스에서 다음을 사용하며 아주 잘 작동합니다.
svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs
나는 항상 사용하는 것 같습니다 svn copy
서버 작업으로서 두 개의 작업 경로에서 작동하는지 확실하지 않습니다.
복원하려는 하나의 파일 만 확인할 수 있어야합니다. 같은 것을 시도하십시오 svn co svn://your_repos/path/to/file/you/want/to/restore@rev
어디 rev
파일이 존재하는 마지막 개정입니다.
나는 조금 전에 이것을 정확하게해야했고, 내가 정확하게 기억한다면 -r
옵션 svn
작동하지 않았습니다. 나는 그것을 사용해야했다 :rev
통사론. (거꾸로 기억했을지 모르지만 ...)