Programing

파일의 이전 SVN 개정으로 되 돌리는 더 좋은 방법은 무엇입니까?

crosscheck 2020. 5. 27. 21:37
반응형

파일의 이전 SVN 개정으로 되 돌리는 더 좋은 방법은 무엇입니까?


실수로 너무 많은 파일을 SVN 저장소에 커밋하고 의도하지 않은 것을 변경했습니다. (한숨) 그들을 이전 상태로 되돌리려면 내가 생각해 낼 수있는 최선이

svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

이봐! 더 좋은 방법이 없습니까? 왜 이런 식으로 쓸 수 없습니까?

svn revert -r 854 l3toks.dtx

좋아, 나는 v1.4.4 만 사용하고 있지만 1.5 분기의 변경 사항 목록을 훑어 보았고 이것과 직접 관련된 것을 볼 수 없었습니다. 내가 놓친 것이 있습니까?


편집 : 나는 충분히 명확하지 않은 것 같아요. 나는 내가하는 변경 잃을 것이기 때문에 내가 병합을 반대 할 생각하지 않았다 만들고 싶어를! 라고 fileA하고는 fileB모두 수정 된하지만 난 단지 커밋하고 싶었다 fileA; 실수로 입력

svn commit -m "small change"

두 파일을 모두 커밋하고 이제 롤백하고 싶습니다 fileB. 리버스 병합을 사용하면 위에서 설명한 단계보다이 작업을 쉽게 알 수 있습니다 (알 수있는 한).


svn merge -r 854:853 l3toks.dtx

또는

svn merge -c -854 l3toks.dtx

두 명령 은 동일 합니다.


svn 책 의 " 변경 취소 "섹션을 확인하십시오.


이전에 주어진 답변을 반복하여 약간의 공간을 사용하는 것은 죄송합니다. 그러나 이것은 항상 문제가됩니다.

로컬 파일을 최신 개정판 인 854로 업데이트했다고 가정 해 보겠습니다. 그런 다음 이전 개정판 (몇몇 이전의 파일 버전, 개정판 851)을 원합니다.

복사가 작동합니다 :

svn copy -r 851 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

.. 그러나 repo URL에 대한 grepping 수 없습니다 :)

업데이트가 작동하는 것 같습니다.

svn up -r 851 ./l3toks.dtx

...하지만 로컬 사본을 "새로 체크 아웃 한"또는 "온라인 개정과 동일"으로 표시합니다 (예 : Tortoise / RabbitVCS에서 녹색 확인 표시가 나타남) svn ci -m "rolled back to r 851". subversion실행 파일은 로컬 변경 사항을 알지 못하며 온라인 저장소에 아무것도 업로드하지 않아도됩니다.

이미 대답했듯이 리버스 병합은 작동하지만이 경우 바로 가기 구문에 의존해서는 안됩니다. 그러나 구체적으로 말하면 :

svn merge -r HEAD:851 l3toks.dtx
--- Reverse-merging r854 through r852 into 'l3toks.dtx':
U    l3toks.dtx

나는 인정해야한다 - 나는 문장을 이해하지 않을 것 " 역 - 병합 파일에 r852을 통해 r854을 " "의미 만이 파일의 r851을 가지고, 당신은 이전에 로컬 가졌던 덮어 쓰기 - 그리고 그것은 최신 온라인 버전과 다른 것으로 표시되기 때문에, 온라인에서 새로운 '롤백'개정판으로 다시 확인할 수 있지만 다음과 같이 생각합니다. :)

그 후에 svn diff로컬로 올바른 개정판을 가져 오면 빠른 확인을 위해 사용할 수 있습니다 . 또한 파일은 Tortoise / RabbitVCS에 빨간색 느낌표 (즉, 최신 커밋 된 버전과 다른)로 표시되므로 svn ci -m "rolled back to r 851"이번에는 실행할 수 있습니다.

또한 리버스 병합 후 마지막으로 마음이 바뀌면 ( 즉, 어쨌든 최신 HEAD 개정판을 계속 사용하고 싶다면 854-로컬로 851로 롤백했지만 아직 롤백을 커밋하지 않은 후) ), svn up단순히 " 개정 854 "에 있다고 말하기 때문에을 사용해서는 안됩니다 . 대신 svn revert --recursive .또는 유사한 것을 사용하십시오 ...

건배!

Ref : Subversion을 사용하여 변경 사항을 롤백하는 방법-Jacob Wright – Flex, AIR, PHP 등

편집 : ... 그리고 분명히 정확히 같은 효과 svn merge -r HEAD:851 l3toks.dtx는 다음을 사용하여 얻을 수 있습니다.

svn export -r 851 l3toks.dtx
A    l3toks.dtx
Export complete.

나는 최근에 오래된 빌드를 디버깅하기 위해 특정 개정으로 되돌려 야했고 이것은 마술처럼 작동했습니다.

svn up -r 3340 (or what ever your desired revision number)

로컬 변경에 신경 쓰지 않았기 때문에 "tc"옵션을 사용하여 모든 충돌을 해결해야했습니다 (되돌리기 전에 내가 돌보는 모든 것을 확인했습니다)

헤드 리비전으로 돌아가는 것도 간단했습니다.

svn up

찾고있는 것을 "역 병합"이라고합니다. SVN 서적의 병합 기능에 대한 문서를 참조해야합니다 (luapyad 또는 해당 게시물의 첫 번째 주석 작성자가 지적합니다). Tortoise를 사용하는 경우 로그보기로 이동하여 마우스 오른쪽 단추를 클릭 한 후 실수 한 부분에서 "이 개정판의 변경 사항 되돌리기"를 선택할 수도 있습니다.


리버스 병합은 정확히 원하는 것입니다 (luapyad의 답변 참조). 전체 디렉토리 대신 잘못 커밋 된 파일에 병합을 적용하십시오.


마지막 체크인 만 취소하려면 다음을 사용할 수 있습니다.

svn merge -r head:prev l3toks.dtx

That way, you don't have to hunt for the current and previous version numbers.


svn merge will merge revisions, not revert them. i.e. if you have some addition in your HEAD version then merge that with a previous revision, then the change will persist.

I use svn cat then redirect it into the file:

svn cat -r 851 l3toks.dtx > l3toks.dtx

Then you have the 851 content in that file and can check it back in.


If you use the Eclipse IDE with the SVN plugin you can do as follows:

  1. Right-click the files that you want to revert (or the folder they were contained in, if you deleted them by mistake and you want to add them back)
  2. Select "Team > Switch"
  3. Choose the "Revision" radion button, and enter the revision number you'd like to revert to. Click OK
  4. Go to the Synchronize perspective
  5. Select all the files you want to revert
  6. Right-click on the selection and do "Override and Commit..."

This will revert the files to the revision that you want. Just keep in mind that SVN will see the changes as a new commit. That is, the change gets a new revision number, and there is no link between the old revision and the new one. You should specify in the commit comments that you are reverting those files to a specific revision.

참고URL : https://stackoverflow.com/questions/345997/better-way-to-revert-to-a-previous-svn-revision-of-a-file

반응형