SVN의 단일 파일을 특정 개정으로 되돌리기


182

SVN 저장소에 아래와 같이 이전 버전으로 되돌리고 싶은 파일이 있습니다. SVN에서 이것을 수행하는 방법은 무엇입니까? 이 특정 파일 만 전체 저장소가 아닌 이전 버전으로 다운 그레이드하고 싶습니다.

감사.

$ svn log myfile.py
----------------------
r179 | xx | 2010-05-10

Change 3
----------------------
r175 | xx | 2010-05-08

Change 2
----------------------
r174 | xx | 2010-05-04

Initial

당신은 되돌리기 말했을 때, 당신은 롤 7 년 전, 무엇을 의미 않았다
— Kalpesh SONI

답변:


181

작업 사본에 이전 파일을 원할 경우 :

svn up -r 147 myfile.py

롤백하려면 " 서브 버전에서 이전 버전의 코드로 돌아가는 방법 "을 참조하십시오 .


8
그러나 다음에 당신은 ... 당신이 다시 싶지 않았다 파일을 가져와 업데이트 : S
— andygoestohollywood

2
다시 원하지 않으면 svn 해당 파일을 커밋하여 원하는 버전을 저장소에 넣으십시오
— Packet Tracer

14
이것은 아마도 질문자가 원하는 것을 실제로하지 않을 것입니다. 이를 사용하면 작업 복사본이 깨끗하고 그대로 커밋 할 수 없으며 버전 번호가없는 "svn update"는 원하지 않는 최신 버전을 검색합니다.
— CXJ

1
그러면 되 돌린 파일을 어떻게 커밋 할 수 있습니까?
— marcio

2
CXJ가 언급했듯이 업데이트 된 파일을 커밋 할 수있는 방법이 없기 때문에 이것은 옳지 않습니다. SVN 수출 --force -r 147 myfile.py myfile.py : 미치 뎀시 (주 그러나, --force 파일을 덮어 쓰기를 강제로) 말한대로 당신은 아마 싶지
— avejidah

76

svn cat도 개정 인수를 취합니다!

svn cat -r 175 mydir/myfile > mydir/myfile


20
이것은 페이지에서 가장 좋은 답변입니다. 변경된 파일을 커밋 할 수있는 상태로 둡니다.
— dotancohen

새 파일에 붙여 넣을 때이 작동하지 않는 것
— ahnbizcad

haha 그것을 다시 보면서, idk 내가 게시했을 때 어떤 컨텍스트를 생각하고 있었는지. 기억이 안나 말도 안되는 것처럼 보입니다.
— ahnbizcad

변경 사항을 취소하고 버전 제어 기술없이 파일을 커밋 전 상태로 되돌리려는 경우 간단하고 간단합니다.
— Anonymous

57
svn revert filename 

단일 파일을 되돌려 야합니다.


4
더 긴 명령으로 다른 모든 대답은 어떻습니까? 감사.
— masterxilo

아니에요. 나는 다른 답변과 함께 무엇인지 전혀 모른다 .. 롤
— 된 스타

13
이것은 어느 개정판으로 되돌아 갑니까? Doc은 최신 repo로 대체한다고 말합니다. 질문은 이전 버전으로 되 돌리는 방법입니다.
— tgkprog

1
최신 버전의 repo로 되돌아갑니다. 질문에 대한 설명을 읽으면 전체 디렉토리가 아닌 단일 파일을 되 돌리는 방법을 찾고있는 것 같습니다.
— thestar

5
나는이 모든 일이 다시 복사본으로 돌아가서 작업 사본을 파괴하는 것이라고 믿습니다. 또는 체크 아웃 된 적이 있습니다. svn update -r VER 파일을 수행하여 확인한 다음 svn 되돌리기를 수행하십시오.
— Gerard ONeill

50

단일 파일의 경우 다음을 수행 할 수 있습니다.

svn export -r <REV> svn://host/path/to/file/on/repos file.ext

가능 svn revert <file>하지만 마지막 작업 사본 만 복원합니다.


2
내 보낸 다음 로컬 사본에 붙여넣고 다시 커밋 하시겠습니까?
— tgkprog

1
@tgkprog 그것은 한 가지 방법입니다, 예
— Mitch Dempsey

@tgkprog 그리고 "선호"방법은 무엇입니까?
— hbogert '10

모르겠지만 그것이 저에게 효과적이었습니다 : 과거 개정 본을 내보냈습니다. 메모장에서 열고 복사하여 작업 파일에 붙여 넣습니다. 어느 개정판과 왜에 대한 의견으로 향하기로 약속했습니다. UI 도구가 더 나은 방법 일 수 있습니다.
— tgkprog

21

지금까지 여기에있는 모든 답변에는 심각한 단점이 있거나 복잡하거나 (리포지토리 URI를 찾을 필요가 있음) 질문에 대한 요청을 수행하지 않습니다. 이전 버전의 파일 .

svn merge -r head:[revision-number-to-revert-to] [file-path]IMO가 가장 깨끗하고 간단한 방법입니다. 삭제 된 파일을 다시 가져와도 이와 같은 방식으로 작동하지 않습니다 [1]. 다음 질문도 참조하십시오 . 파일의 이전 SVN 개정으로 되 돌리는 더 좋은 방법은 무엇입니까?

[1] 당신이 원하는 svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up 경우 SVN에서 삭제 된 파일을 복원하는 올바른 방법은 무엇입니까?를 참조하십시오 .


적어도 내 Subversion 버전의 svn merge경우 어떤 이유로 여러 파일을 인수로 사용하지 않습니다. 이 경우 아무것도하지 않는 것 같습니다 (오류 메시지 없음).
— Wrzlprmft

그러나 내 명령은 여전히 ​​각 파일마다 반복하여 작동합니다.
— Michel Müller

그렇습니다.
— Wrzlprmft

1
이것이 가장 깨끗하다는 데 동의했습니다.
— KevinG

13

가장 좋은 방법은 다음과 같습니다.

svn merge -c -RevisionToUndo ^/trunk

이렇게하면 실행 취소하지 않으려는 파일을 되 돌리는 것보다 개정의 모든 파일이 실행 취소됩니다. -개정판의 접두사로 대시 ( )를 잊지 마십시오 .

svn revert File1 File2

이제 변경 사항을 다시 커밋하십시오.


9

하고 싶다

svn merge -r [revision to revert from]:[revision to revert to] [path/filename]

일단 그렇게하면 커밋 가능 상태의 파일 개정판을 갖게됩니다. 파일을 커밋하십시오.


7

svn cat명령을 통해이 작업을 수행하는 것이 간단하다는 것을 알았습니다 . 따라서 개정을 지정할 필요조차 없습니다.

svn cat mydir/myfile > mydir/myfile

타임 스탬프와 같은 inode (메타 데이터) 데이터를 다시 롤백하지 않을 것입니다.


그런 다음 파일을 커밋하여 repo로갑니다
— tgkprog

3
이것은 업데이트보다 나에게 더 효과적이었습니다. 업데이트를 통해 해당 파일에 대한 수정 사항을 커밋 할 수 없습니다. (svn 1.8.3)
— fe_lix_

7

아무도 이것을 언급하지 않았다

개정 번호를 찾지 않고 쓸 수있는 경우, 되돌리고 싶은 것을 커밋 한 경우 다른 파일을 변경하고 대상 파일이 마지막으로 변경된 파일이 아닌 경우 작동하지 않습니다

svn merge -r HEAD:PREV file

의견이 있으시면 수정하기 전에 여기에서 논의 하시겠습니까?
— Kalpesh Soni

1
문제의 시나리오에서 가장 최근의 변경 사항을 역 병합하지 않아도되므로 HEAD에서 PREV로 이동하는 데 필요한 변경 사항을 적용해야합니까?
— Nick Russo

4
명령은 svn merge -r HEAD:PREV file@Nick Russo가 말했듯이
— Heinz

4

파일이 두 개이고 Tortoise SVN을 사용하는 경우 다음 방법을 사용할 수 있습니다.

  1. 소스 파일을 마우스 오른쪽 버튼으로 클릭하고 "TortoiseSVN"-> "로그 표시"를 선택하십시오.
  2. 로그에서 수정본을 마우스 오른쪽 버튼으로 클릭하고 "수정본 저장 위치 ..."를 선택하십시오.
  3. 이전 버전을 사용하여 현재 파일을 덮어 씁니다.
  4. 덮어 쓴 소스 파일을 커밋하십시오.

그러면 xxxx가 이전 개정 번호 인 file-xxxx와 같은 버전이없는 새 파일이 저장됩니다. 우리는 다음에 무엇을합니까? 새 수정본 (예 : HED)을 삭제하고 새 파일의 이름을 바꾸고 추가, 커밋 하시겠습니까?
— Heinz

아니요, 파일 이름에 개정 번호와 함께 저장하지 마십시오. 동일한 파일의 현재 버전과 정확히 동일한 파일 이름으로 저장하십시오 (즉, 파일 이름에 xxxx가 없음). 그런 다음 그 후에 평범한 커밋을하십시오.
— Elling

4

아직 언급 할 담당자가 충분하지 않기 때문에 @Mitch Dempsy 답변에 추가하십시오.

svn export -r <REV> svn://host/path/to/file/on/repos --force

--force를 추가하면 로컬 복사본을 내보내기로 덮어 쓰고 svn 커밋을 수행하여이를 저장소로 푸시 할 수 있습니다.


그리고 이것은 가장 좋은 답변입니다 :)
— Zgr3doo

왜 이것이 최선의 대답입니까? 역사를 "svn way"로 관리하지 않습니다
— Jason S

2

단일 파일의 대체 옵션은 현재 버전의 파일을 이전 버전으로 "대체"하는 것입니다.

svn rm file.ext
svn cp svn://host/path/to/file/on/repo/file.ext@<REV> file.ext
svn ci

여기에는 원하지 않는 변경 사항이이 파일의 로그 (예 : svn log file.ext)에 표시되지 않는 기능이 추가되었습니다.


1

특정 개정판에서 개별 파일을 롤백하고 커밋하려면 다음을 수행하십시오.

svn merge -c-[OldRev #] [파일 이름]

즉. svn merge -c -150 myfile.py

개정 번호에 음수를 적어 둡니다.


-1
sudo svn revert filename

이것은 단일 파일을 되 돌리는 더 좋은 방법입니다


2
sudoer 권한이있는 프로덕션 시스템에 가까이 가지 않기를 진심으로 바랍니다.
— David Lakatos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.