문제

가지가 트렁크에 다시 통합되면 해당 가지가 사실상 죽은 것입니까?

재통합 후 브랜치를 수정하고 나중에 다시 트렁크에 병합할 수 있나요?

도움이 되었습니까?

해결책

기술적으로는 할 수 있습니다. 분기가 종료되거나 비활성화되지는 않지만 재통합 후에 분기에서 트렁크로 병합하는 것은 권장되지 않습니다.

그 이유에 대한 전체 토론은 여기에서 찾을 수 있습니다. Subversion 병합 재통합

기본적으로 변경 사항을 트렁크에 다시 병합하는 것이 가능하지만 재통합 작업을 수행하기 전에 트렁크에서 분기로 병합해야 하기 때문에 Subversion 1.5에서 매우 문제가 되는 반사/순환 병합에 직면하게 됩니다. .
기사에 따르면 재통합 후 즉시 재통합된 브랜치를 삭제하고 대신 동일한(또는 다른) 이름으로 새 브랜치를 생성하는 것이 좋습니다.

이는 향후 버전(아마 1.6)에서 해결될 알려진 Subversion 동작입니다.


다른 팁

실제로, 당신은 --record-only 트렁크에서 다음에 의해 생성된 개정의 분기로 병합됩니다. --reintegrate 저지르다:

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

그리고 이제 그걸 녹음해

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

이제 지점을 유지하게 되어 기쁩니다.

자세한 내용은 4장.분기 및 병합, 고급 병합.

브랜치에서 트렁크로 다시 통합한 후에는 다음 두 가지 중 하나를 수행해야 합니다.

  • 지점 삭제.이것이 가장 쉽지만 브랜치의 기록을 보기가 더 어려워집니다.

  • 재통합 커밋을 병합하지 말라고 브랜치에 지시하세요..트렁크에 다시 통합하고 개정 X로 커밋하는 경우 분기에서 다음 명령을 실행할 수 있습니다. svn merge --record-only -c X url-to-trunk.그러나 병합 자체가 아닌 커밋의 일부로 변경한 경우에는 이 작업을 수행해서는 안 됩니다.다른 변경 사항은 절대로 브랜치로 다시 적용되지 않습니다.

누군가가 브랜치를 여러 번 변경한 경우 변경 사항을 다시 병합하는 방법에 대한 몇 가지 조언(1.5 이전): 병합을 수행한 개정판을 기억하세요.!수정 번호를 어딘가에 적어두거나, 또는 (더 쉽다) 태그를 만들어라.(물론 나중에 알 수도 있겠지만 그건 PITA입니다.)

예:

다음과 같은 저장소 레이아웃이 있습니다.

/your_project
  /trunk
  /branches
  /tags

그것이 웹 애플리케이션이고, 릴리스를 계획하고 있다고 가정해 보겠습니다.태그를 생성하고 해당 태그(또는 트렁크)에서 버그 수정을 수행하는 분기를 생성합니다.

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

이렇게 하면 트렁크에 새로운 기능을 통합할 수 있습니다.모든 버그 수정은 bugfix 분기 내에서만 발생하며 각 릴리스 전에 현재 버전의 태그를 만듭니다(현재는 bugfix 분기에서).

상당한 양의 버그 수정을 수행하고 이를 프로덕션 서버에 릴리스했으며 현재 트렁크에 이러한 기능 중 하나가 절실히 필요하다고 가정해 보겠습니다.

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

이제 1.0.0과 1.0.2 사이의 변경 사항을 트렁크에 통합할 수 있습니다(작업 복사본에 있다고 가정).

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

이것이 당신이 기억해야 할 것입니다.이미 트렁크에 1.0.0과 1.0.2 사이의 변경 사항을 병합했습니다.현재 프로덕션 릴리스에 더 많은 변경 사항이 있다고 가정해 보겠습니다.

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

이제 트렁크에서 새 버전을 출시할 준비가 되었지만 버그 수정의 마지막 변경 사항은 아직 누락되었습니다.

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

이제 당신은 모두 트렁크에 변경 사항이 병합되면 릴리스할 수 있습니다(먼저 테스트하는 것을 잊지 마세요).

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0

모두가 이미 여기에서 말했듯이:브랜치는 죽지 않았으며 해당 브랜치에 대한 커밋은 정상적으로 계속될 수 있습니다.

때로는 병합 후 분기를 종료하고 싶을 때도 있습니다.유일하게 안정적인 해결책은 분기를 삭제하는 것입니다.단점은 예를 들어 역사적인 이유로 지점을 살펴보고 싶은 경우 지점을 다시 찾기가 더 어렵다는 것입니다.그래서 많은 사람들은 "중요한" 브랜치를 그대로 두고 이를 변경하지 않기로 합의합니다.브랜치를 데드/읽기 전용으로 표시하여 추후 공지가 있을 때까지 누구도 커밋할 수 없도록 하는 방법이 있었으면 좋겠습니다.

아니요, 가지는 아직 살아있습니다. 하지만 그 순간에는 줄기와 똑같습니다.브랜치에서 계속 개발하는 경우 나중에 트렁크와 자유롭게 다시 병합할 수 있습니다.

원하는 횟수만큼 브랜치에서 트렁크로, 트렁크에서 브랜치로 병합할 수 있습니다.

우선, 아직도 Subversion 1.7 이하를 사용하고 있다면 Subversion 클라이언트와 서버를 업그레이드해야 합니다.아주 오래된 Subversion 릴리스를 사용할 이유가 없습니다.2016년 현재 버전은 Subversion 1.9입니다.SVN 1.8도 현재 지원되며 여전히 버그 수정을 받고 있습니다.

귀하가 문의한 문제는 Subversion 1.8에서 해결되었습니다.SVN 1.8부터, --reintegrate 옵션이 되었습니다 더 이상 사용되지 않음.이제 재통합 병합이 수행됩니다. 자동으로.보다 개선과 관련된 Subversion 1.8 릴리스 노트 항목.

읽다 SVNBOOK 1.8 | 지점을 다시 통합합니다:

트렁크에 통합 한 후 분기를 삭제하지 않기로 선택한 경우 트렁크에서 동기화 합병을 계속 수행 한 다음 분기를 다시 통합 할 수 있습니다.이렇게하면 첫 번째 재 통합 후 분기에서의 변경 사항 만 트렁크에 병합됩니다.

...

Subversion 1.8만이 기능 분기의 재사용을 지원합니다.이전 버전에는 피처 브랜치가 두 번 이상 재 통합되기 전에 일부 특수 처리가 필요합니다.자세한 내용은이 장의 이전 버전을 참조하십시오. http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

병합을 수행할 때 대상을 지정합니다.원하는 경우 TreeA와 TreeB의 차이점을 TreeC에 병합할 수 있습니다.Chris가 암시했듯이 귀하의 질문은 그다지 의미가 없습니다.브랜치를 트렁크에 병합하면 브랜치는 그대로 유지됩니다.나중에 지점이 필요하지 않으면 삭제할 수 있습니다.

브랜치에서 계속 개발할 수 있으며 필요한 기능은 다음과 같습니다. 병합 추적 이는 Subversion 1.5에 있으므로 브랜치의 추가 병합에는 새로운 변경 사항만 포함된다는 의미입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top