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.