2008-09-29 6 views

답변

17

필립스 방법은 다음과 같을 것이라고 생각하지만, 마지막으로 "좋은"버전은 100이었다 가정하고, 130에서 지금은 새로운 지점을 만들려면 다음

svn copy -r100 svn://repos/trunk svn://repos/branches/newbranch 
svn merge -r 100:130 svn://repos/trunk svn://repos/branches/newbranch 

참고 트렁크에 다시 적용 할 수 있도록 아이디어는 그 수정에서 변경을 유지하는 것입니다 .

svn merge -r130:100 . 
svn ci -m 'reverting to r100 (undoing changes in r100-130)' . 

(그것은 문제가되지 것입니다 당신이 지점을 만들기 전에 트렁크를 되돌릴 수 있도록, 다음을 수행 주문 :

트렁크를 되돌리려.일을 왜 있는지 그

svn switch svn://repos/branches/newbranch workdir 
+2

이것은 좋은 해결책입니다. 나는 비슷한 문제가 있었다. 여기서 언급하지 않은 것은 작업 사본에서 병합을 수행해야하므로 'newbranch'를 확인해야합니다. –

+2

변경 사항을 다시 통합하면 어떨까요? 다시 통합하기 전에 브랜치가 트렁크와 함께 최신 상태인지 확인해야합니다. 따라서 trunk -> newbranch를 병합해야합니다. 그러면 다시 역 병합으로 병합됩니다 ('svn merge -r 100 : 130 svn : // repos/trunk svn : // repos/branches/newbranch') ** newbranch **에서 원하는 변경 사항 (** 100 : 130 **)을 제거합니다. –

+1

@RyanGriffith 아마도 [변경을 차단하기위한 지침] (http://svnbook.red-bean.com/en/1.8/svn.branchmerge.advanced.html#svn.branchmerge.advanced.blockchanges)을 따르면됩니다. 브랜치에서 이미 병합 된 되돌리기 –

2

업데이트 기록에 "cruft"가 남기는 것 외에는 Philip의 방법을 따르는 데있어 아무 문제가 없습니다. 깔끔하게 제거하기 위해 HEAD에있는 리비전은 these instructions을 따라 저장소에서 제거 할 수 있습니다.

업데이트 : 필립의 방법은 그가 말한 이유에 대한 질문에서 제안한 것보다 낫습니다. 내와 필립의 방법은 유사 할 것이지만, 트렁크를 되 돌리는 대신에 나는 개정 역사에서 개정을 제거 할 것을 제안한다. (내가 말했듯이, 삭제하려는 모든 개정판이 저장소의 HEAD에있는 경우에만 수행 할 수 있습니다.)

+0

당신에 관한 정교한 수 :)

그런 다음 당신은 당신이 REPO에서 만든 새 분기로 전환 할 수 있을까? 질문에서 제안 된 방법을 사용할 수없는 이유는 무엇입니까? –

+0

질문에 게시 한 절차가 정상적으로 작동합니다. 유일한 단점은 추가 커밋을 남기고 로그에서 복귀한다는 것입니다. 샘 Hasler의 링크는 여분의 항목을 청소하는 데 도움이 될 수 있지만, 그것은 엄격하게 선택 사항입니다. – AaronSieb

+0

Aaron이 말했듯이 커밋을 제거 할 필요는 없습니다. 엄격하게 선택 사항입니다. 당신이 역사에서 추가 커밋을하는 것이 어떤 시점에서 혼란 스러울 것이라고 생각하지 않는다면 꼭 모든 것을 방해하지 마십시오. 문제를 일으킬 수있는 경우에만 문제를 일으킬 수 있습니다. –

3

솔직히 말해서, 변경 사항을 복사하고, trunk, branch를 되돌리고, 변경 사항을 적용합니다. 지점으로. 나중에 쉽게 병합 할 수있는 주된 이유입니다. 나중에 분기점에서 트렁크에서 분기로 병합하면 병합에 초기 변경 내용이 되돌아갑니다.

병합 할 때 항상 수정 내용을 건너 뛸 수 있기 때문에 "올바른"방법이 아닐 수도 있지만 일반적으로 나에게 두통이 덜합니다. 면책 조항 : 나는 svn 전문가가 아니므로 내가 잘못하고 있기 때문에 나를 위해 더 쉬울 수도 있습니다 -하지만 svn 꽤 많이 사용합니다.

+0

나는 병이 병합 될 것이라고 생각했다. 대답을 주셔서 감사합니다 –

0
내가 바로 여기에 해당 svn을하지 않는

하지만 내가 그것을 수행하려고 할 것입니다 방법입니다

역사에 지점을 결정 당신이 나쁜 물건을 커밋 시작 경우 (예를 들어 수정 "100"당신이에있는 동안 " 130 ")

svn copy trunk branch # create your branch while preserving history 
svn copy [email protected] trunk #replace current revision with revision 100 

이것은 실제로 100과 130 사이의 트렁크의 역사를 우회하는 역 병합 (추가하지 않고 나쁜 역사를 우회해야하지만 당신은 지점 및 접근 트렁크 동안 그 역사에 대한 링크를 유지 리브를 강요해도 올바른 히스토리가 산출됩니다)

그런

svn switch branch workdir 

완전히 트렁크에서 변경 사항을 제거하려면이 작동합니다. 당신이 유지하고자하는 작은 것들이 있다면 체리 지점에서 트렁크에 그들을 다시 선택하실 수 있습니다 (당신은 svn 1.5 병합 지점을 추적하고 가짜 충돌을 피할 수)

+0

그것은 내가 트렁크를 무시하게하지 않습니다. "path '트렁크'가 이미 존재 함"이라고 말하면 실패합니다. 전에 해본 적이 있니? 내가 뭔가 잘못하고 있는거야? 감사합니다. –

관련 문제