2013-03-21 12 views
19

SVN의 사용자가 너무 오래되었지만 분기/태그 지정에 익숙하지 않은 경우가 있습니다. 실제로 사용하거나 올바르게 사용하지는 못했습니다.분기를 사용하는 SVN 전략 및 트렁크에서 분기로 변경 사항 병합

새로운 기능 등을 추가 할 때 트렁크를 사용하고 있습니다.이 코드베이스는 여러 웹 사이트에서 사용되며 프로젝트별로 트렁크에서 분기를 만듭니다.

각 지점은 일반적으로 해당 프로젝트에 특정한 수정 사항을 가지고 있으며 재사용 할 것으로 생각되는 모든 항목이 트렁크에 추가되어 다양한 프로젝트에서 기능을 켜고 끌 수 있습니다.

현재 트렁크를 변경하고 이전 버전의 브랜치에서 이러한 수정을 원할 때마다 특정 리비전을 분기에 수동으로 병합하고 다시 시작해야합니다. 이상적이지 않고 물건을 놓치기 쉽습니다.

내 질문에 ... 트렁크의 모든 변경 사항을 내 지사로 업데이트하고 충돌이있는 표준 트렁크 업데이트 인 것처럼 처리 할 수있는 방법이 있습니까?

트렁크에 브랜치를 다시 통합하는 방법을 보았습니다.하지만이 인스턴스에서 브랜치를 사용하고 있기 때문에 실제로 원하는 것은 아닙니다.

+0

명령 줄에서 svn을 사용합니까, 아니면 TortoiseSVN과 같은 GUI를 사용합니까? –

+5

그래서 주위에있는 동안 나는 SVN 사용자였습니다. 그리고 SVN과 싸워서 원하는대로 할 수는 있지만 정직해야합니다. git는 훨씬 더 낫습니다. 그것은 당신이 말하고있는 것을 중심으로 설계되었습니다 (그러나 "더 많은 가지"를 생각하십시오). 가지를 병합하고 추적하는 일을 많이하고 싶다면 SVN repo를 git repo로 변환하고 거기에서 이동하십시오. 당신은 더 행복 할거야 (나는 내 ​​패치가 10 년 이상 SVN 프로젝트를 git로 변환 한 후 어디에서나 적용된다는 것을 안다는 것을 안다) –

+0

smartsvn (아마도 더 많은 것)과 명령 행 – Horse

답변

22

예 가능합니다. 기본적으로, 당신은 당신의 지점의 깨끗한 작업 복사본 (아무 로컬 수정 한)에서 svn merge를 실행해야합니다

$ pwd 
/home/user/mybranch 
$ svn status # Does not display anything 
$ svn update # Make sure your local copy is up to date. 
Updating '.': 
At revision X. 
$ svn merge url/to/repository/trunk 
Updates, additions, deletions and conflicts. 
$ #handle conflicts. 
$ svn commit -m "Merging changes from the trunk". 

는 SVN 책에서 Keeping a Branch in Sync를 참조하십시오.

첫 번째 병합은 많은 분쟁을 야기 할 수 있습니다. 특히 분지가 오래 전에 분기 된 경우 특히 그렇습니다. 후자의 병합은 원활하게 진행되며, 특히 자주 병합하는 경우 더욱 그렇습니다.

+0

완벽하게 작동합니다! 덕분에 – gnuyoga

+0

나는 그랬고 그 후, 내가 트렁크를 brach에서 업데이트하려고 시도했을 때 트럭에서 업데이트 된 모든 새로운 클래스가 충돌했다. 내가 뭐 잘못 했어요? 아니면 이런 식으로해야합니까? – Sertage