트렁크에 분기 병합


125

SVN에 특이한 문제가 merge있습니다. 개발 지점에서 트렁크로 병합하고 싶습니다. 우리는 동시에 여러 가지 분기가 트렁크를 잘라 냈습니다.

이 명령으로 해당 지점 중 하나를 트렁크에 병합하고 있습니다.

svn merge trunk branch_1

이 분기의 일부가 아닌 변경 사항이 트렁크에 병합되는 것을 볼 수 있습니다. 내가 뭘 잘못하고 있죠 ?

SVN 버전 :

Subversion 명령 줄 클라이언트 버전 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32


7
나는 이것이 대답이 아니라는 것을 알고 있지만, 동시에 여러 개의 활성 분기가있는 경우 아마도 수은 또는 자식으로 이동하는 것이 좋습니다. 추신 : 나는 나는 ~ 칠년 ;-)에 대한 SVN과 함께 일한지, 광신자가 아니에요
— zerkms

2
어떤 이점이 있습니까? 왜 자식이나 수은으로 옮기는 것이 더 나은 선택입니까?
— Vanchinathan Chandrasekaran

3
자식과 머큐리얼은 브랜치를 훨씬 잘 지원 하기 때문 입니다. 장점 : 당신이 그런 질문을하지거야, 그리고 (이 그들과 함께 작업에 지옥이었다 SVN 현재 내가 1000 가지>와 프로젝트에서 일하고 있어요) 지점을 작성하고 관리하기에 덜 두통이있을 것이다
— zerkms

Svnmerge.py 를 살펴 보고이 기사를 검토하는 것이 좋습니다 .
— chown

답변:


215

귀하의 svn merge구문이 잘못되었습니다.

작업 사본을 체크 아웃 한 trunk후 svn merge --reintegrate옵션 을 사용 하려고합니다 .

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

자세한 내용은 SVN 서적 병합 에 관한 장 을 참조하십시오.


그것이 쓰여질 당시에는 이것이 정답이었고 받아 들여졌지만 일이 진행되었다는 점에 유의하십시오. topek의 답변과 http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate를 참조하십시오


4
--reintegrate 옵션은 필수는 아니며, 분기 (1.6)는 여러 번의 목적지 와 병합 될 수 있습니다
— Lazy Badger

1
정말? 동일한 변경 세트를 다시 가져올 위험이 없습니까? 당신은 이것의 확실한 증거에 대한 링크를 제공 할 수 있습니까?
— Neutrino

--reintegrate실제로 필수는 아니지만이 경우에는 실제로 권장됩니다. 나는 그것을하지 않고 노력했고 --reintegrate수백 가지의 갈등으로 끝났습니다. 로 --reintegrate, 갈등이 없었고 모든 것이 좋았습니다!
— tibo

17
--reintegrate옵션은 간단하고 효과적이지만, 일단 "고 지적되어야합니다 --reintegrate병합 트렁크 지점에서 수행되고, 분기가 더 이상 추가 작업에 사용할 수 있습니다. 올바르게 새 트렁크 변경을 흡수하는 것이 아니 할 수있어,도 제대로 재 통합 될 수있다 다시 트렁크로 당신이 연결 한 책에서 설명한대로.
— Pino

3
@ daveL, 트렁크에서 분기로의 병합이 나에게 합리적입니다. 그러나 "반복 된 분기를 유지하는"고급 기능을 찾았습니다 ( stackoverflow.com/a/10163059/685806 참조 ). 또한 최신 클라이언트 버전에서 자동으로 적용됩니다.
— Pino

78

작업 디렉토리가 트렁크를 가리키는 경우 브랜치를 다음과 병합 할 수 있어야합니다.

svn merge https://HOST/repository/branches/branch_1

트렁크의 루트 디렉토리에서이 명령을 실행해야합니다


7
SVN 1.8 기준 이것이 정답입니다. subversion.apache.org/docs/release-notes/…
— GreenAsJade

@blahdiblah 코드 스 니펫에는 많은 관련 정보가 있습니다. 연구의 개요가 연구의 다른 부분보다 더 많은 읽기 순서를 갖는 이유가 있습니다. UX 테스트, 이탈률 최소화 등도 마찬가지입니다. 모두 같은 원칙입니다.
— ahnbizcad

1.7을 사용하면 --reintegrate 옵션없이 병합하고 지점에서 계속 개발하고 병합 할 수 있습니다. 안타깝게도 1.8은 이것을 재 통합으로 만들 것이며, 그것을 막을 방법이없는 것 같습니다. 이것은 당신이 합병하자마자, 끔찍한 "keep-alive dance"를 거치지 않고 지점을 사용할 수 없다는 것을 의미합니다.
— John Little

3
그런 다음 병합 후 트렁크의 작업 사본을 다시 저장소로 커밋하는 것을 잊지 마십시오!
— John

16

트렁크에서 svn 업데이트를 수행하고 개정 번호를 확인하십시오.

트렁크에서 :

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

svn log를 수행하여 트렁크에서 분기가 잘린 위치를 확인할 수 있습니다

svn log --stop-on-copy

동시에 여러 개의 dev 브랜치가 활성화되어 있기 때문에 이것은 나에게도 효과가 없었습니다.이 명령은 다른 브랜치에서도 변경 사항을 가져 왔습니다. SLik SVN 클라이언트에 문제가 있습니까?
— Vanchinathan Chandrasekaran

이것이 정확하지는 않지만 최신 버전 svn(예 : OP에서 사용하는 버전)과 쉽게 통합 할 수있는 방법이 있습니다 .
— blahdiblah

@VanchinathanChandrasekaran, 명령에서 분기 이름을 지정하면 svn://path/to/branch/branchName다른 분기가 아닌 해당 분기의 변경 사항 만 가져와야합니다. 그렇다면 우리는 위험에 처해 있습니다!
— 프레드릭 가우스

1

구문이 잘못되었습니다. 대신

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.