문제

우리 팀의 누군가가 팀 저장소의 현재 개정에서 여러 파일을 삭제하기 위해 "실수"를 만들었습니다. 현재 로컬 버전을 헤드 개정으로 업데이트 할 수 있습니까? Commit을 클릭하면 하위 클립은 누락 된 파일을 인식하여 업로드하지 않습니다.

미리 감사드립니다.
레이트

도움이 되었습니까?

해결책

오, 피트의 사랑을 위해! 지금까지 대답은 오해의 소지가 있습니다.

당신의 질문에서, 당신은 다음과 같은 것을 시도한 것 같습니다.

svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"

제외하고는 작동하지 않습니다. 커밋 할 수정 사항이 없습니다. 이전 개정판으로 업데이트 할 수 있지만 변경할 수는 없습니다. 과거를 바꿀 수 없습니다. 피해를 취소하면서 새로운 개정판 만 저지르면됩니다.

좋아, 저장소가 svn : // repo에 있다고 가정 해 봅시다. 여기서는 트렁크 폴더에 "A"및 "B"라는 두 파일이 포함 된 단순화 된 예제입니다. 이 개정 8 (R8)이라고합시다.

trunk    # working copy of svn://repo/trunk
    a
    b

JR 해커, 미끄러 져서 실수로 b :

svn rm b
svn commit -m "oops"

결과 커밋 R9라고 부릅니다.

다음에 저장소에서 업데이트 할 때

svn update

trunk
    a

b 사라진다! 공황? 아닙니다. 이것은 버전 제어 시스템입니다. 체크인 된 모든 것을 복원 할 수 있습니다. 두 가지 가능성은 다음과 같습니다.

단지 복사 이전 개정판의 파일, 즉 여전히 존재하는 마지막 개정판 : 8.

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

보다 일반적인 해결책은 a를 사용하는 것입니다 병합. 이 기술을 사용하여 길 잃은 삭제 이상을 취소 할 수 있습니다.

svn merge -r9:8 . .
svn commit -m "reverted the changes made in revision 8"

이 병합을 읽는 방법은 다음과 같습니다.

먼저 현재 디렉토리 (첫 번째 ")와 관련된 저장소 폴더 (svn : // repo/trunk)의 R9 (뒤로)에서 R8로 가져와야하는 변경 사항을 파악하십시오. 이제 현재 디렉토리의 작업 사본에서 이러한 변경 사항을 수행하십시오 (두 번째 ".").

단일 변경을 되돌려 놓는 경우 더 편리한 구문이 있습니다.

svn merge -c-8  . . #note the minus sign before the 8

명령 줄에서 SVN을 사용하지 않는 경우 도구 주위를 약간 찌르면 무언가를 찾을 수 있습니다. 예를 들어, 작업 사본에서 로그를 열 때 "이 개정판에서 변경 사항을 되돌립니다"와 같은 TortoisesVN이 있습니다.

다른 팁

개정판에서 삭제 된 SVN 파일의 사본 (예 : 데스크탑의 임시 폴더)을 사용한 다음 업데이트 (동료의 커밋 된 삭제 조치에 따라 원본 파일을 제거합니다)를 다시 이동 한 다음 사본을 다시 이동하십시오. 그리고 그들을 SVN에 다시 저지하십시오.

다음을 수행 할 것입니다.

삭제 전에 개정 번호를 찾으십시오 ... Svnadmin 덤프 -R1 : [GoodRevisionNumber는 여기]> file.dump를 수행하십시오.

그런 다음 새 저장소 인 "svnadmin create [repository name]을 만들고 덤프를 새 저장소에로드하십시오. "svnadmin load [newRepositoryName] <file.dump.

그런 다음이 개정판을 확인하고 이전 체크 아웃의 파일을 새 제품으로 복사하여 커밋하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top