2011-01-06 8 views
5

각각의 커밋이 '트렁크'에 들어간 후, 우리는 자동으로 트렁크에 대한 일련의 테스트를 실행합니다. 이러한 테스트가 통과되면 'tests-passed'라는 지점에 자동화 된 병합을 수행하고 싶습니다. 테스트가 실패하면 병합은 발생하지 않지만 일단 문제가 다음 또는 이후 커밋에서 '트렁크'에 고정되면 모든 변경 사항을 병합해야합니다.자동 테스트가 통과되면 어떻게 자동으로 svn 병합합니까?

포인트는 트렁크와 동일한 내용을 갖는 브랜치를 갖는 것이지만, 적어도 자동화 된 테스트가 통과 했으므로 '트렁크'보다 조금 더 정숙합니다.

수동으로 시도하는 스크립트가 있지만 올바르게 찾지 못하는 사용자 정의 속성을 사용하는 해킹입니다. 방금 알았 듯이. Subversion으로 하여금 어떻게하면 좋을까요?

+0

병합 충돌을 어떻게 처리 할 계획입니까? – Steve

+1

병합 충돌이있을 것으로 생각하지 않습니다. 'tests-passed'는 'trunk'의 HEAD가 테스트를 통과하지 않는 경우를 제외하고 항상 'trunk'와 동일한 내용을가집니다. '트렁크'마지막 테스트가 통과했을 때. –

답변

5

실행 svn:mergeinfo 속성의 병합. 따라서 위의 명령은 0:<somerev> 범위의 수정 버전이 이미 병합 대상에서 제외되고 이미 완료된 병합은 제외합니다.

의견에서 말한 것처럼 충돌이 발생하지 않습니다. 하지만 때로는 이름 바꾸기가 포함 된 SVN 수정 버전을 병합 할 때 예상치 못한 충돌이 발생하는 경우가 있습니다. 이러한 충돌을 제거하려면 merch 명령에 --accept theirs-full 옵션을 사용하여 항상 트렁크 상태를 허용하십시오.

+0

아, "어떤 개정판이 적합한 지 자동 판단"은 멋지지만, 나는 몰랐습니다. 나는 어떻게 든 나 자신을 추측해야한다고 생각했다. 그것은 추악했다. 을 어떻게 찾았습니까? 'svnversion trunk'를 시도 했습니까? 아니면 +1해야할까요? –

+0

@Johannes : +1 일 필요는 없습니다. 예를 들어 최신의 성공적인 빌드가 개정판 100 인 경우'-r 0 : 100'을 병합 할 수 있습니다. –

0

테스트 스위트를 사용하는 것이 좋을 것 같습니다.

필자의 경험에 비추어 볼 때 ANT 스크립트를 실행하여 코드를 테스트하고 테스트가 성공하면 최종 조건부 분기를 실행할 수 있습니다.

+0

우리는 실제로 ant와 함께 테스트를 실행하고, 여러분이 말하는 것처럼 최종 조건을 갖습니다. 질문은 : 어떻게 svn이 그 조건에 따라 올바른 병합을 할 수 있도록합니까? –

+0

새 코드마다 Name_spacing을 따르십니까? (code_ versioning)이 이런 상황에서 도움이 될 수 있습니다. – NaV

+0

? 나는 당신이 무슨 말을하고 있는지 전혀 모르겠다. –

1

이를 위해 Continuous Integration Tool을 사용할 수 있습니다. 하나는 꽤 인기 : 허드슨 당신은 스크립트가 그런 행동 할 수

http://hudson-ci.org/

.

당신이 병합 명령을 사용할 때마다
svn update 
svn merge http://example.com/svn/myproject/trunk -r 0:<somerev> 
svn commit -m "merged trunk revisions up to <somerev> into tests-passed" 

, SVN은 기록합니다 : 새 트렁크 개정 <somerev>이 테스트를 통과하는 것으로 확인 될 때마다 시험이-통과의 작업 복사본의 루트에이 명령이

+0

다시, 제 질문은 그것의 svn 부분에 관한 것이지 스케줄링이나 스크립팅 부분에 관한 것이 아닙니다. 허드슨이 모르는 svn 마법을 가지고 있지 않다면?(여기서 우리의 설정은 Hudson을 사용하여 '트렁크'의 체크 인에 대한 응답으로 빌드와 테스트를 실행합니다.) –

관련 문제