2009-02-25 5 views
30

사람들이 트렁크와 Subversion 저장소의 한 지점에서 일하고 있다고 가정 해 보겠습니다. 트렁크의 변경 사항을 무시하고 분기의 사본으로 교체하려고합니다.트렁크를 서브 버전의 브랜치로 바꾸기

another question에서 제안한대로 트렁크를 이동하거나 제거한 다음 트렁크로 분기를 복사 할 수 있습니다. 그러나 트렁크의 역사는 지부의 역사로 대체됩니다. 트렁크의 역사를 간직하고 싶다면?

내가 원하는 것은 병합과 같지만 대상의 변경 사항이 무시되고 소스로 바뀐 것입니다. Subversion에서 어떻게합니까? 이것이 좋은 연습으로 간주됩니까? 이러한 병합 후

svn merge -rX:HEAD url/of/branch trunk\wc --accept theirs-full 

:

+0

이전 버전을 탐색하여 트렁크의 기록에 계속 액세스 할 수 있습니다 ... –

+0

하지만 파일의 기록 (예 : Subclipse)을 보는 도구는 분기의 수정본 만 표시합니다. 병합/복사 후 트렁크에 복사 작업의 모든 추가/변경/제거가 포함 된 새 개정판을 하나만보고 싶습니다. –

+0

+1 : 나는 이것을 또한 할 필요가있다. @JW 이것을 작동 시키셨습니까? –

답변

4

병합 모든 트렁크에 분기의 변경, 그리고 당신이 그렇게 병합을 말할 수

svn resolve path --accept theirs-full 

모든 충돌을 해결 또는 브랜치에있는 것과 같은 작업 사본이 있습니다. 트렁크의 작업 카피를 커밋하기 만하면됩니다.

+3

브랜치 지점 이후의 트렁크 변경 사항은 보존되지 않습니다 (적어도 충돌하지 않는 경우에는)? 그런 병합의 결과가 트렁크처럼 보이지는 않을 것이라고 확신하지만, 당신은 전문가입니다 ... – rmeador

+1

브랜치를 생성 한 이후로 트렁크에 역 병합을 수행하여 모든 변경 사항을 취소 할 수 있습니다. 그런 다음 그 역 병합을 커밋하십시오. 그런 다음 분기를 트렁크에 병합 할 수 있습니다. – Stefan

+0

'svn rm trunk'다음에 'svn copy branch trunk'(또는 svn move branch trunk)가 오는 것은 어떻습니까? –

1

나는 당신이하려는 일을 잘 모르겠다. 지점을 만든 후에 트렁크에 대한 모든 변경 사항을 어떻게 처리할까요? 병합 후 파일 기록을 볼 때 로그에 나타나지 않게 하시겠습니까? 그렇다면 트렁크를 삭제하고 분기를 해당 위치로 복사하면 분기가 트렁크와 함께 내역을 공유하므로 분기 이후에 수정 된 사항을 제외하면 동일합니다.

트렁크의 내역을 유지하면서 분기와 병합 사이의 모든 변경 사항을 보완하려면 약간 까다로운 문제입니다. 나는 당신이 조상을 무시하는 병합 (옵션이 --ignore-ancestry 인 경우)을 수행한다면 트렁크의 내용을 브랜치로 대체 할 것이라고 생각한다. 병합을 사용하여 --force 옵션을 시도 할 수도 있습니다 (대신에 그리고 --ignore-ancestry과 함께 사용). 두 가지 방법으로 원하는 결과를 얻는 지 확인하십시오.

만약 실패하면 분기 지점 이후의 모든 변경 사항을 트렁크에서 역 병합 한 다음 분기에서 병합 할 수 있습니다. 이것은 약간의 갈등을 야기 할 가능성이 높습니다. 물론 갈등의 원인이 될 수 있습니다. 이 아이디어들 중 어느 것이 최적인지 나는 모른다.

+0

트렁크의 모든 변경 사항에 대해 두 가지 옵션 중 두 번째 옵션을 원합니다. –

4

이전 1.5 이것은 간단합니다. 작업 복사본이 트렁크를 가리키는 지 확인한 다음 "svn merge url-of-trunk url-of-branch"를 수행하십시오. 변경 사항은 트렁크와 브랜치 사이의 델타입니다. 트렁크를 브랜치처럼 보이게하는 데 필요한 모든 것을 제공하십시오.

1.5의 새로운 병합 기능으로이 시나리오가 변경되는지는 알 수 없습니다. 트렁크의 역사는 그대로 다음 단계에 따라

svn copy <repos/trunk> <repos/tag/old_trunk> -m "copied old trunk as tag" 

svn delete <repos/trunk> -m "deleted trunk temporarily" 

svn copy <repos/branch/new_fetaure_branch> <repos/trunk> -m "placed new trunk with features" 

보관 :

+1

트렁크에 분기를 병합해도 실제로 트렁크 대신 분기 상태를 복사하는 것과 같은 결과를 얻지 못할 수 있습니다. 1.5 이전 버전에도 적용되지 않음 – JanM

32

는하지만 꽤 오래된 스레드하지만 여전히 우리는 최근 우리의 프로젝트 중 하나에 이런 짓을하고 가이드 라인을 따라

내 경험 공유 트렁크로 새 지형지 물을 교체하십시오.

+0

현재 트렁크의 기록을 보면, 새로운 지점의 기록이 복사 된 지점까지 표시됩니다. 이전 트렁크의 기록을 보려면 삭제하기 전에 개정판을 지정해야합니다. –

+0

/tag/old_trunk에서 오래된 트렁크 기록을 볼 수 있습니다 –

+0

거북이를 사용합니다. 그러나 이것이 내 전략이 될 것입니다. –

0
trunk  remplace (trunk with your branch) 
*----x  * ----> 
\   | 
    \   | 
    *--------| 
    branch 

이 지점은 잔인 트렁크 (조상 문제를) 삭제하지 마십시오 너무 조심 트렁크에서 만들었습니다.

  1. 마우스 오른쪽 단추로 클릭> 팀 지점/태그

    하는 이클립스 SVN을 사용 : 우선이 좋아한다 제안 ... 어떤 경우에 트렁크, 백업과

    을 태그를 만들 (태그 - 백업 만들기)

  2. 팀> 다른 지점/태그 전환 ... 지점을 선택하고 지점이 올바르게로드되었는지 확인하십시오.

  3. : Team> disconnect. SVN 정보를 삭제하십시오.

  4. 팀> 프로젝트 공유 ... 트렁크 선택.

  5. 팀> 트렁크에 커밋하십시오.

  6. 오른쪽을 클릭하십시오. ... 비교를 선택하십시오. 지점/태그 -> 지점을 찾으십시오. 모든 것이 OK라면 "선택한 입력간에 차이가 없습니다."

도움이되기를 바랍니다.

관련 문제