개정 할 항목 업데이트 및 개정으로 되돌리기


161

TortoiseSVN과 함께 Subversion을 사용하기 시작했습니다. 로그를 열고 이전 버전을 마우스 오른쪽 버튼으로 클릭하면 이전 버전으로 롤백하는 것처럼 보이는 두 가지 옵션 인 "항목을 개정판으로 업데이트"와 "이 개정판으로 되돌리기"가 표시됩니다.

이전 버전으로 되돌아 가고 실제로 리포지토리를 변경하지 않으려는 경우 이전 버전으로 업데이트하는 것이 사용됩니다. 되돌리기는 실제로 망 쳤고 저장소의 최신 개정판이 이전 버전과 동일하도록하려는 경우입니다.

HEAD 개정판이 100이고 다시 95로 되돌립니다. 작업 사본을 다시 95로 다시 병합합니다. 그런 다음 변경 사항을 저장소에 적용하여 개정판 101을 올바르게 작성할 수 있습니까? 개정 95로 다시 업데이트하면 어떻게 다른가요? 여전히 마지막 개정판의 변경 사항을 되 돌리지 않습니까? 이전 버전으로 되돌 리거나 업데이트 한 후 작업 복사본의 상태가 어떻게 다른지에 대해 혼란스러워합니다.

답변:


205

수정본 업데이트는 작업 복사 파일 만 선택한 수정본으로 업데이트합니다. 그러나 SVN은 작업 복사본이 오래 되었다고 불평하므로이 개정 작업을 계속할 수 없습니다 .

이 수정본으로 되 돌리면 선택한 수정본 (예 : 개정판 96,97,98,99,100) 이후에 작성된 작업 본의 모든 변경 사항이 취소됩니다. 작업 본은 이제 수정 된 상태입니다. 입니다.

두 시나리오의 파일 내용은 동일하지만 첫 번째 경우 수정되지 않은 작업 복사본이 있고 두 번째 경우 수정 된 작업 복사본이 헤드 및 계속 일하고 커밋 할 수 있습니다


1
좋습니다. 개정판으로 업데이트하고 작업 사본에 데이터가 없습니다. 아무것도 파일을 변경하는 것을 막을 수 없습니다. 파일 중 하나를 변경하고 커밋하려고하면 어떻게됩니까? Subversion을 추측하면 충돌이 발생하여 저장소에있는 최신 버전을 수정 된 작업 복사본에 병합하여 제출해야합니다.
Eric Anastas

5
: 당신이 머리보다 나이가 BASE-개정으로 항목을 저지하려고하면, 당신은 "당신의 작업 복사본이 최신 propbably입니다 커밋에 실패했습니다"얻을 것이다
피터 파커

수행하는 방법 update torevert to/from로컬 변경 (커밋되지 않은 변경)을 치료?
BaltoStar

두 가지 방법 모두 로컬 변경 사항을 그대로 유지하지만 로컬 변경 사항은 두 경우 모두 충돌을 일으킬 수 있으며 되돌리기의 경우 롤백의 수정 사항이 다른 모든 사용자 로컬 변경 사항과 혼합됩니다. 따라서 최소한 수정 패치를 저장하거나 지점에 커밋하십시오.
피터 파커

31

두 시나리오에서 작업 복사본의 상태가 어떻게 다른지 이해하려면 BASE 개정 의 개념을 이해해야합니다 .

베이스

작업 복사본에있는 항목의 개정 번호입니다. 항목이 로컬로 수정 된 경우 로컬 수정없이 항목이 나타나는 방식을 나타냅니다.

작업 복사본에는이 BASE 개정판의 각 파일 (.svn 폴더에 숨겨져 있음)의 스냅 샷이 포함 되며 이는 저장소에서 마지막으로 검색했을 때와 같이 의미 합니다 . 이것은 작업 사본이 2 배의 공간을 차지하는 이유와 네트워크 연결없이 로컬 수정을 검토하고 되돌릴 수있는 방법을 설명합니다.

항목을 개정으로 업데이트 하면이 기본 개정이 변경되어 BASE가 오래되었습니다. 로컬 수정을 커밋하려고하면 SVN은 BASE가 저장소 HEAD와 일치하지 않음을 알 수 있습니다. 이 문제를 해결하기 위해 업데이트 (및 병합)를 수행 할 때까지 커밋이 거부됩니다.

수정본으로 되 돌리면 BASE가 변경되지 않습니다. 이전 개정판과 일치하도록 파일을 수동으로 편집하는 것과 개념은 거의 동일합니다.


허용 된 답변에서 "두 시나리오의 파일 내용은 동일합니다." 왜 귀찮게? 이 답변은 궁극적 인 차이점을 설명하고 커밋을 시도 할 때 "업데이트"대 "vist" "revert"가 다른 동작을 유발하는 이유를 설명합니다.
radarbob

수행하는 방법 update torevert to/from로컬 변경 (커밋되지 않은 변경)을 치료?
BaltoStar

5

작업중인 사본의 파일이 보일 수 있습니다 이후 완전히 수 있지만 여전히 매우 다른 작업입니다. 리포지토리는 완전히 다른 상태에 있으며 이전 버전으로 "업데이트"하는 것보다 되 돌린 후 다른 옵션을 사용할 수 있습니다. .

간단히 "업데이트"는 작업 복사본에만 영향을 주지만 "역 병합 및 커밋"은 리포지토리에 영향을줍니다.

이전 버전으로 "업데이트"하면 리포지토리가 변경되지 않습니다. 예를 들어 HEAD 버전은 여전히 ​​100입니다. 작업 복사본을 엉망으로 만들기 때문에 아무것도 커밋 할 필요가 없습니다. 작업 복사본을 수정하고 커밋하려고하면 작업 복사본이 오래되었다는 메시지가 표시되며 커밋하기 전에 업데이트해야합니다. 동일한 리포지토리에서 작업하는 다른 사람이 "업데이트"를 수행하거나 두 번째 작업 복사본을 체크 아웃하면 r100이됩니다.

그러나 이전 개정판으로 "병합 병합"하는 경우 작업 사본은 여전히 ​​HEAD를 기반으로합니다 (최신 상태라고 가정). 그러나 원하지 않는 변경 사항을 대체하기 위해 새 개정판을 작성하고 있습니다. 저장소를 변경하므로 이러한 변경 사항을 커미트해야합니다. 완료되면 HEAD를 기반으로하는 모든 업데이트 또는 새로운 작업 사본이 방금 커밋 한 내용과 함께 r101을 표시합니다.


5

작업 사본을 선택된 개정으로 업데이트하십시오. 작업 사본이 과거의 시간을 반영하도록하거나 저장소에 추가 커밋이 있고 작업 사본을 한 번에 한 단계 씩 업데이트하려는 경우에 유용합니다. 하나의 파일이 아닌 작업 복사본에서 전체 디렉토리를 업데이트하는 것이 가장 좋습니다. 그렇지 않으면 작업 복사본이 일치하지 않을 수 있습니다. 테스트가 완료된 경우 특정 rev 목적을 테스트하는 데 사용되며,이 명령을 사용하여 다른 rev를 테스트하거나 SVN Update 를 사용 하여 HEAD를 가져올 수 있습니다.

이전 변경 사항을 영구적으로 실행 취소하려면 대신 이 개정판으로 되돌리기를 사용하십시오.

-TSVN 도움말 문서에서

작업 사본을 이전 개정으로 업데이트하는 경우, 이는 자신의 작업 사본에만 영향을 미치며 일부 변경을 수행 한 후 커밋하려는 경우 실패합니다 .TSVN은 먼저 WC를 최신 개정으로 업데이트하라는 경고를 표시합니다. 개정판에 저장소에 커밋 할 수 있습니다. 모두가 업데이트를 수행하면 개정판으로 돌아갑니다.


2

거북이 참조의 텍스트 :

항목을 개정으로 업데이트 할 업데이트 작업 사본을 선택된 개정으로 업데이트합니다. 작업 사본이 과거의 시간을 반영하도록하거나 저장소에 추가 커밋이 있고 작업 사본을 한 번에 한 단계 씩 업데이트하려는 경우에 유용합니다. 하나의 파일이 아닌 작업 복사본에서 전체 디렉토리를 업데이트하는 것이 가장 좋습니다. 그렇지 않으면 작업 복사본이 일치하지 않을 수 있습니다.

이전 변경 사항을 영구적으로 실행 취소하려면 대신이 개정판으로 되돌리기를 사용하십시오.

이 버전으로 되돌리기 이전 버전으로 되돌립니다. 몇 가지 사항을 변경 한 다음 개정판 N의 상태로 돌아 가고자한다면, 이것이 필요한 명령입니다. 작업 복사본에서 변경 사항이 취소되므로 변경 내용을 커밋 할 때까지이 작업이 리포지토리에 영향을 미치지 않습니다. 파일 / 폴더가 이전 버전으로 바뀌면서 선택한 수정 후 변경된 사항이 모두 취소됩니다.

작업 복사본이 수정되지 않은 상태 인 경우이 작업을 수행하면 작업 복사본이 수정 된 것으로 표시됩니다. 이미 로컬 변경이있는 경우이 명령은 실행 취소 변경 사항을 작업 사본에 병합합니다.

내부적으로 일어나는 일은 Subversion이 선택된 수정 이후에 이루어진 모든 변경 사항을 역으로 병합하여 이전 커밋의 영향을 취소한다는 것입니다.

이 작업을 수행 한 후 실행 취소를 취소하고 작업 복사본을 수정되지 않은 이전 상태로 되돌리려면 Windows 탐색기 내에서 TortoiseSVN → 되돌리기를 사용해야합니다.

이전 버전에서 파일 또는 폴더가 어떻게 보이는지 보려면 업데이트를 사용하여 버전 수정 또는 다른 이름으로 버전 저장 ...을 사용하십시오.


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