TortoiseSVN을 사용하여 트렁크에서 분기로 또는 그 반대로 변경 사항을 어떻게 병합합니까?


132

Subversion을 사용하여 훌륭하고 무료로 제공되는 Version Control 책을 사용하여 Subversion 1.5와의 분기 / 병합에 대해 읽었습니다 . Subversion 명령 줄 클라이언트를 사용하여 가장 필요한 작업을 수행하는 방법을 이해하고 있다고 생각합니다.

트렁크의 변경 사항으로 분기 업데이트

지점의 작업 디렉토리에서 다음을 실행하십시오.

svn 병합 http://svn.myurl.com/proj/trunk

트렁크로 분기 병합

트렁크의 작업 디렉토리에서 다음을 실행하십시오.

svn merge-재 통합 http://svn.myurl.com/proj/branches/mybranch

그러나 우리는 Subversion의 인터페이스로 TortoiseSVN 1.5를 사용하고 있습니다. TortoiseSVN으로 이러한 작업을 수행하는 가장 좋은 방법을 알고 싶습니다. 새 대화 상자는 기본 메뉴에서 세 가지 옵션을 제공합니다.

  1. 다양한 버전의 병합
  2. 지점 재 통합
  3. 두 개의 다른 나무를 병합

내가 수집 할 수있는 것에서 TortoiseSVN은 항상 다음 구문으로 svn을 실행합니다.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

또한 일부 대상이 병합되지 않아 계속 진행할 수 없다는 메시지와 함께 지점 재 통합이 실패하는 경우가 많으므로 옵션 # 3을 사용해야했습니다.

내 질문은 :

  1. TortoiseSVN 1.5를 사용하여 트렁크에서 분기로 변경 사항을 병합하려면 어떻게해야합니까?
  2. TortoiseSVN 1.5를 사용하여 재 통합 방법을 사용하거나 사용하지 않고 분기를 트렁크에 병합하려면 어떻게해야합니까?
  3. 위의 옵션 중 각각에 사용해야하는 이유는 무엇입니까?

편집하다

"드라 이런"테스트를 통해 명령 행 Subversion 작업을 찾았습니다.

svn 병합 http://svn.myurl.com/proj/trunk

개정 범위를 비워 두는 한 TortoiseSVN의 옵션 # 1 (개정 범위 병합)과 유사합니다.


링크를 찾을 수 없습니다! = /
Leonardo Costa

답변:


28

동작은 리포지토리의 버전에 따라 다릅니다. Subversion 1.5에서는 4 가지 유형의 병합이 가능합니다.

  1. sourceURL1 병합 [@N] sourceURL2 [@M] [WCPATH]
  2. sourceWCPATH1 @ N 병합 sourceWCPATH2 @ M [WCPATH]
  3. 병합 [-c M [, N ...] | -r N : M ...] 소스 [@REV] [WCPATH]
  4. 병합-소스 재 통합 [@REV] [WCPATH]

1.5 이전의 Subversion은 처음 2 개의 형식 만 허용했습니다.

기술적으로 처음 두 가지 방법으로 모든 병합을 수행 할 수 있지만 마지막 두 가지는 subversion 1.5의 병합 추적을 활성화합니다.

TortoiseSVN의 옵션은 저장소가 1.5 이상인 경우 방법 3에, 또는 저장소가 오래된 경우 방법 1에 범위 또는 개정 맵을 병합합니다.

기능을 릴리스 / 유지 보수 브랜치로 병합 할 때는 '다양한 버전의 병합'명령을 사용해야합니다.

브랜치의 모든 기능을 상위 브랜치 (일반적으로 트렁크)로 다시 병합하려는 경우에만 '브랜치 재 통합'을 사용해야합니다.

그리고 마지막 명령-두 개의 다른 나무 병합-은 정상적인 분기 동작을 벗어나려고 할 때만 유용합니다. (예 : 다른 릴리스를 비교 한 다음 다른 분기를 다른 분기에 병합)


누군가 stackoverflow.com/questions/51657636/…을 도와주세요 . 이것은 우리 팀에게 중요한 질문입니다. 우리는 그 주위에 아이디어가 필요합니다.
ankur

249

다른 답변을 제대로 따를 수 없었습니다. 여기에 더 많은 인형 안내서가 있습니다 ...

당신은 갈 길 내내이 작업을 수행 할 수 있습니다 trunk -> branch또는 branch -> trunk. 난 항상 먼저 trunk -> branch거기에 충돌을 해결하고 병합 branch -> trunk합니다.

트렁크를 지점 / 태그에 병합

  1. 지점 / 태그 확인
  2. 분기의 루트를 마우스 오른쪽 버튼으로 클릭 | 거북이 SVN | 병합 ...
  3. 병합 유형 : 수정 버전 범위 병합 | '다음'을 클릭하십시오 여기에 이미지 설명을 입력하십시오
  4. 수정 버전 병합 : 분기 / 태그에 복사 한 트렁크 디렉토리의 URL을 선택하십시오. 병합 할 개정을 입력하거나 모든 개정을 병합하려면 필드를 비워 두십시오. '다음'을 클릭하십시오 여기에 이미지 설명을 입력하십시오
  5. 병합 옵션 : 나는 이것을 기본값으로 남겨 두었습니다. '병합'을 클릭하십시오 여기에 이미지 설명을 입력하십시오
  6. 이것은 개정을 체크 아웃 된 브랜치 / 태그에 병합합니다
  7. 그런 다음 병합 된 변경 사항을 브랜치 / 태그에 커밋하십시오.

4
"병합 할 수정 범위"를 생략하고 "테스트 병합"을 수행했습니다. 그것은 내가 필요한 것입니다 : 범위가 자동으로 설정되었습니다 (분기가 완료된 시점부터 분기의 마지막 개정까지)
Lian

좋은 답변-간결하고 따르기 쉽습니다. 그것은 나를 위해 일했지만 단지 하나의 구성 파일을 병합하고 싶을 때 어떤 이유로 든 두 번해야했습니다. 이제 다 괜찮아 건배
윙어

@Lian 나는 트렁크에서 브랜치로 병합하기 위해 같은 일을했다. 트렁크의 최신 버전의 파일을 분기 파일과 병합하려면 수정 범위를 비워 두십시오.
Winger

2
Tortoise SVN의 현재 버전에는 4 단계에서 수정 범위를 비워 두지 않고 모든 수정을 병합 할 수있는 옵션이 있습니다.
Unknown Dev

1
@Onkar 어떤 갈등은 거의 항상 일어날 것입니다. 당신은 예를 들어, 두 개의 지점을 가지고있는 경우에 trunkbranch다음 당신이에서 모든 변경 내용을 병합 것을 만드는 trunkbranch가능한 한 빨리 가능한 한만큼 충돌을 방지 할 수있다. 이는 병합 branch할 때 trunk충돌이 없어야 함을 의미합니다 .
icc97

12

"수정 범위 병합"을 사용해야합니다.

트렁크에서 분기로 변경 사항을 병합하려면 분기 작업 복사본 내에서 "버전 범위 병합"을 선택하고 트렁크 URL과 병합 할 시작 및 끝 버전을 입력하십시오.

트렁크에서 분기를 병합하는 것과 반대의 방법입니다.

--reintegrate 플래그에 대해서는 다음 설명서를 확인하십시오. http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate


1

svnmerge.py를 살펴보십시오 . TortoiseSVN이 호출 할 수없는 명령 줄이지 만 더 강력합니다. 로부터 자주 묻는 질문 :

기존의 Subversion을 사용하면 변경 사항을 병합 할 수 있지만 이미 병합 한 내용은 "기억"되지 않습니다. 또한 변경 집합을 병합에서 제외하는 편리한 방법을 제공하지 않습니다. svnmerge.py는 일부 작업을 자동화하고 단순화합니다. Svnmerge는 또한 병합 된 모든 것의 로그 메시지와 함께 커밋 메시지를 생성합니다.


6
svnmerge.py는 Subversion 1.4 및 이전 버전에서 개발되었습니다. Subversion 1.5는 핵심 제품에서 병합 추적을 도입했습니다.
Bert Huijben

0

Shift- 오른쪽 폴더를 클릭하고 TortoiseSVN-> 모두 병합을 선택하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.