svn - 이전 - 이클립스 롤백




Subversion에서 코드의 이전 버전으로 되돌리려면 어떻게해야합니까? (9)

PC에서 좋은 복사본을 직접 만들 수없는 이유는 .svn 폴더가 과거의 코드임을 알고 있으므로 업데이트가 필요하기 때문입니다. 그러나 당신은 실제로 전복 역사의 머리에서 변화를 저지를 수 있습니다.

당신이 사용할 수있는

svn update -r <earlier_revision_number>

올바른 버전의 올바른 버전 번호를 찾을 때까지 프로젝트의 여러 이전 버전을 검사 할 수 있습니다. 찾았 으면 가장 최신 (헤드) 버전으로 업데이트 한 다음 위에서 제안한대로 svn 병합을 적용하십시오.

정말로 찾을 수없고 PC에서 사본을 커밋 해야 한다면 최신 버전으로 새로 업데이트하고 .svn 폴더 없이 "정상"버전을 복사하십시오. 좋은 사본에없는 파일을 폴더 및 전복에서 삭제하고 지금 가지고있는 것을 저 지르십시오.

친구와 함께 프로젝트를 진행하고 있으며 이전 버전의 코드로 돌아가서 현재로 설정하려고합니다. 어떻게해야합니까?

vs08에서 "anksvn"을 사용하고 있습니다.

내 PC에 원하는 버전이 있지만 커밋이 실패했습니다. 내가받는 메시지는 "커밋 실패, 파일 또는 디렉토리가 오래되었습니다."입니다.

내 PC에도 Subversion 클라이언트가 있습니다.


그냥이 줄을 써라.

svn update -r yourOldRevesion

다음을 사용하여 현재 개정판을 알 수 있습니다.

svn 정보


나는 이것이 가장 적합하다고 생각한다.

예를 들어 커밋 된 코드에 rev 5612에서 5616까지의 개정판이 포함 된 경우 역순으로 병합하십시오. 그것은 내 끝에서 작동합니다.

예를 들면 :

svn merge -r 5616:5612 https://<your_svn_repository>/

이전 개정판에 병합 된 코드가 포함되어 있으면 커밋 할 수 있습니다.


다음은 나를 위해 일했다.

로컬 변경 사항이 많았으므로 SVN에서 마지막으로 안정된 버전을 로컬 복사본 및 체크 아웃에 버려야했습니다.

  1. 무시 된 파일을 포함하여 모든 파일의 상태를 확인하십시오.

  2. 새로 추가되거나 무시 된 파일을 얻기 위해 모든 행을 Grep하십시오.

  3. // 교체하십시오.

  4. rm -rf 모든 줄.

    svn status --no-ignore | grep '^ [? I]'| sed "s / ^ [? I] //"| xargs -I {} rm -rf "{}"


병합을 사용하여 전체 체크인을 실행 취소하는 표준 방법은 원하는대로 수행 할 수 있습니다. 그러나 가끔씩 원하는 것은 하나의 파일을 되 돌리는 것입니다. 합법적 인 방법은 없지만 해킹이 있습니다.

  1. svn log를 사용하여 원하는 버전을 찾으십시오.
  2. svn의 export 하위 명령을 사용하십시오.

    svn은 http : // url-to-your-file @ 123 / tmp / filename을 내 보냅니다 .

(여기서 123은 파일의 올바른 버전에 대한 개정 번호입니다.) 그런 다음 하나의 파일을 이동하거나 복사하여 이전 파일을 덮어 씁니다. 수정 된 파일을 체크인하면 완료됩니다.


이것이 내가 한 일이고 나를 위해 일했습니다.

특정 시간 동안 수행 한 여러 커밋의 변경 사항을 취소하고 이전 커밋 시점으로 이동하려고합니다.

  1. 팀 -> 기록보기로 이동하십시오.
  2. 무시하려는 리비전 범위를 마우스 오른쪽 버튼으로 클릭하십시오.
  3. '변경 사항 되돌리기'옵션을 선택하십시오.

이렇게하면 작업 사본의 변경 사항을 취소하고 역 병합이 실행됩니다.

코드를 검토하고 커밋하십시오.


이전 버전과 동기화하고 커밋하십시오. 이것은 트릭을해야합니다.

변경 사항 실행 취소에 대한 설명도 있습니다.


존 스켓 (Jon Skeet)의 대답은 간단히 말해서 많은 해결책이지만, 나 같은 사람이라면 설명을 원할 수도 있습니다. Subversion 매뉴얼에서는 이것을 a라고 부릅니다.

체리 피크 병합

맨 페이지에서.

  1. 이 형식을 'cherry-pick'병합이라고합니다. '-r N : M'은 수정본 N과 M 사이의 소스 브랜치의 내역 차이를 나타냅니다.

    '역방향 범위'를 사용하여 변경 사항을 실행 취소 할 수 있습니다. 예를 들어, 소스와 타겟이 같은 브랜치를 참조하면 이전에 커밋 된 리비전을 '실행 취소'할 수 있습니다. 역방향 범위 에서 N은 '-r N : M'의 M보다 크거나 '-c'옵션은 음수와 함께 사용됩니다. '-c -M'은 '-r M :'과 같습니다. 이와 같은 변경 사항을 실행 취소하는 것은 '역 병합'을 수행하는 것으로 알려져 있습니다.

  • 소스가 파일이면 차이점이 해당 파일에 적용됩니다 (이전 변경 사항을 역 병합하는 데 유용함). 그렇지 않으면 소스가 디렉토리이면 대상의 기본값은 '.'입니다.

    통상의 사용에서는, 작업 카피가, 로컬 리비전이나 서브 트리의 전환이없는, 단일의 리비전으로 최신이되어있을 필요가 있습니다.

예:

svn merge -r 2983:289 path/to/file

위의 인용문에 따라 로컬 복사본 (서버와 동기화되어야 함 - 책임)을 서버의 리비전 289로 대체합니다 (2983). 변경 사항은 로컬에서 발생합니다. 즉, 청결한 체크 아웃이있는 경우 변경 사항을 커밋하기 전에 검사 할 수 있습니다.


조금 더 오래된 학교

svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch

다음 평소에

svn diff
svn commit






backport