SVN은 커밋 전에 삭제를 취소합니다.


135

SVN 작업 복사본에서 디렉토리를 삭제했지만 아직 커밋하지 않은 경우 되돌릴 방법이 확실하지 않습니다. "svn undo d"를 입력 할 때 "svn undo delete before commit"을 일반적인 쿼리로 제안하지만 검색 결과는 도움이되지 않습니다.

편집 : Subversion 1.4.4에서 작동하는 솔루션을 원합니다


보류중인 변경 사항으로 삭제 한 형제 디렉토리가 있습니까? 그렇다면 더 높은 수준에서 되돌릴 때 변경 사항이 손실 될 수 있으므로주의하십시오.
Russell

답변:


145

svn revert deletedDirectory

svn revert명령에 대한 설명서다음과 같습니다 .


편집하다

deletedDirectory사용하여 삭제 rmdir하지 않은 svn rm경우을 수행해야합니다.

svn update deletedDirectory

대신에.


3
SVN 1.4.4에서는 작동하지 않습니다. (최초의 시도였습니다.)
LaC

4
이것은 1.4.4의 말입니다 : btw : $ svn help revert revert : 원래 작업 복사본 파일을 복원합니다 (대부분의 로컬 편집 내용은 제외). 사용법 : revert PATH ... 참고 :이 하위 명령은 네트워크 액세스가 필요하지 않으며 충돌 된 상태를 해결합니다. 그러나 제거 된 디렉토리는 복원하지 않습니다.
LaC

1
1.6.6 도움말에 동일한 텍스트가 있지만 테스트 할 때 도움이되었습니다. svn delete디렉토리를 삭제 하지 않고 대신을 사용하여 삭제 한 경우 대신 디렉토리를 삭제 rmdir해야합니다 svn update deletedDirectory.
Michael Hackner

로컬 svn-ed 디렉토리에서 하나의 파일 (svn del)을 삭제했습니다. svn 업데이트가 작동하지 않았지만 svn 되돌리기가 작동했습니다. Mac 용 SynchroSVN을 사용하고있었습니다. 그러나 팁 주셔서 감사합니다.
karim

5
링크에 따라 svn -R revert를 사용하여 모든 내용이 포함 된 전체 디렉토리의 삭제를 취소하십시오. -R없이 svn revert는 내용이 아닌 디렉토리 만 복원합니다.
n13

156

1) 할

svn revert . --recursive

2) 다음과 같은 오류에 대한 출력 구문 분석

"Failed to revert 'dir1/dir2' -- try updating instead."

3) 각 오류 디렉토리에 대해 svn up을 호출하십시오.

svn up dir1/dir2

12
이것은 가장 정확한 답변입니다. 대단히 감사합니다. 많은 도움을 주셨습니다.
greenoldman

1
그만 빼고 모든 것을 되돌릴 수 있습니까? 그렇게하고 싶지 않을 수도 있습니다.
n13

1
SVN이 삭제 한 것으로 생각되는 전체 폴더가있는 경우 가장 적합합니다. 작업 사본을 확인하는 동안 그 내용이있었습니다. 하나의 폴더가 이미 존재하므로 충돌로 인해 체크 아웃되지 않았습니다. 다른 폴더에 대한 링크였습니다. 나는 그것을 이름을 변경하고 시도 svn up가 체크 아웃 얻기 위해, 충돌을 실현했다 svn resolved foo그리고 svn status내가로 표시 10K 파일에 대한했다 나에게 말했다 D. svn up그리고 svn revert그들을 다시 얻을 수 있지만,이 문제가 해결되지 않았다.
simbabque

6
+1 --recursive은 삭제 된 디렉토리의 내용을 복원하는 데 도움이됩니다.
Melebius

1
세상에, 당신은 내 저녁을 구 했어요!
ArturOlszak

32

나를 위해 일한 것은

svn revert --depth infinity deletedDir

이것은 svn revert deletedDir 이 작업을 수행하지 못한 저에게 효과적이었습니다 (svn 1.7.10) . 훌륭한 답변입니다.
rtome

4

삭제 한 디렉토리 위의 레벨에서 (재귀) 되돌리기 작업을 수행하십시오.


1
이렇게하면 필요한 것보다 더 많은 변경이 없어집니다.
Michael Hackner

Subversion 1.4.4에서는 작동하지 않습니다 (방금 시도했습니다). svn help revert는 "이 하위 명령은 네트워크 액세스가 필요하지 않으며 충돌 상태를 해결합니다. 그러나 제거 된 디렉토리는 복원하지 않습니다."라고 말합니다. 죄송합니다. 버전을 지정해야합니다. 1.4.4는 Mac OS X 10.5와 함께 제공됩니다.
LaC

4

하나의 라이너로 만들려면 다음과 같이 시도하십시오.

svn status | cut -d ' ' -f 8 | xargs svn revert

이름에 공백이있는 디렉토리를 만들 수 있습니다. AFAIK가 '잘려 질'수 있습니다.
Denis Barmenkov

1

내가 찾을 수있는 가장 간단한 해결책은 작업 복사본에서 부모 디렉토리를 삭제하고 (svn delete가 아닌 rm -rf 사용) 조부모에서 svn update를 실행하는 것입니다. 예를 들어, a / b / c, rm -rf a / b, cd a, svn up을 삭제 한 경우. 그것은 모든 것을 다시 가져옵니다. 물론 이것은 부모 디렉토리에 유지하려는 다른 커밋되지 않은 변경 사항이없는 경우에만 좋은 솔루션입니다.

다음 페이지 에이 질문을봤을 때이 페이지가 결과 상단에 있기를 바랍니다. 물론 누군가가 더 깨끗한 방법을 제안하면 더 좋습니다.


부모에 보류중인 변경 사항이있는 하위 디렉토리가 없다고 가정합니다.
Russell

0

커밋하기 전에 폴더를 제거하고 상위 디렉토리를 업데이트 할 수 있습니다.

rm -r some_dir

svn update some_dir_parent

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.