트렁크에 분기 병합


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구문이 잘못되었습니다.

작업 사본을 체크 아웃 한 trunksvn 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.