문제

우리 팀의 개발 프로세스는 기반입니다 지속적인 통합. 우리가 만든 유일한 지점은 우리가 출시 할 때 유지 보수 지점이지만, 그렇지 않으면 개발자는 정기적으로 (매일 더 자주하지 않더라도) 트렁크에 커밋해야하므로 모든 사람의 작업이 항상 통합되고 지속적으로 테스트되며 모든 좋은 것들이 있습니다.

내 이해 DVC 분기에 적합하다는 것입니다. 나는 몇 년 전에 모든 개발이 지점에서 이루어졌고 완전하고 테스트 할 때만 합병 되었기 때문에 이것이 매우 유용한 팀에서 일했습니다. 그러나 이것은 지속적인 통합과는 다른 철학이었습니다.

그러나 지속적인 통합을 사용하는 팀의 경우 DVCS 도구의 그루비 기능은 다음과 같은 것 같습니다. git 특히 관련이 없으며, 변경 사항을 병합에 잊어 버릴 수있는 추가 단계가 필요한 경우 지속적인 통합 프로세스를 방해 할 수도 있습니다.

DVC의 다른 이점이 있다고 확신합니다 (예 : 커밋은 지역이기 때문에 매우 빠릅니다. 아마도 주요 지점과 합병하는 것은 개발자가 작업을 수행하는 동안 백그라운드에서 발생할 수 있습니다).

그러나이 질문에 대해 DVC를 사용하고 지속적인 통합을 사용하는 팀이 두 가지 상충되는 철학을 조정하는 방법에 관심이 있습니다. 나는 주로 실제로 이것을하는 사람들의 의견에 관심이 있습니다.

도움이 되었습니까?

해결책

실제로 DVC는 지속적인 통합을 훨씬 쉽게 만들었습니다.

Central VC를 통해 모든 개발자는 트렁크에 직접 커밋 할 권리가 있으므로 버기 코드를 커밋 할 수 있습니다. CI는 사실 후에 그것을 감지합니다. 따라서 CI에서도 트렁크를 부러 뜨릴 수 있습니다.

반면에 DVCS 세계의 기본 운영은 분기 및 병합입니다. 병합은 명시 적이며 별도의 프로세스 대 트렁크에 커밋되기 때문에 언제든지 병합 결과를 확인할 수 있습니다. ~ 전에 트렁크에 착륙합니다. 나는 GIT에 대한 경험이 없지만 Bazaar VC의 개발자들은 PQM 도구의 도움으로 최소 3.5 년 동안이 기술을 성공적으로 사용해 왔습니다.

기본적으로 PQM 워크 플로우는 다음과 같이 보입니다. 개발자는 자신의 지점을 게시하여 병합 될 수있게 한 다음 병합 지침으로 PQM 봇에 특별 이메일을 보냅니다. PQM이 병합 요청을 받으면 별도의 통합 브랜치 (트렁크 사본)를 만들고 개발자의 분기를 병합하고 결과 코드에서 테스트를 실행합니다. 모든 테스트가 통과되면 통합 브랜치가 트렁크로 푸시됩니다. 그렇지 않으면 개발자는 실패한 테스트 로그로 이메일을 받게됩니다.

Bazaar 프로젝트에 대한 모든 테스트를 실행하는 데는 시간이 걸리지 만 별도의 서버에서는 주문형으로 테스트가 실행됩니다. 개발자는 합병에 의해 차단되지 않으며 다른 작업에서 계속 작업 할 수 있습니다.

PQM 기반 병합 워크 플로의 결과로 BZR 트렁크는 절대로 깨지지 않습니다 (적어도 수용 및 회귀 테스트가 충분한 한).

다른 팁

모든 DVCS는 중앙 저장소를 사용하는 워크 플로우와 함께 사용할 수 있으므로 아무런 문제가 없습니다. 정책은 개발자가 정책이 분산되지 않은 VC에 저지르는 것과 같은 방식으로 중앙 저장소로의 변경을 추진해야한다고 지시합니다. 개발자가 패치 세트를 편집 할 수있는 추가 도구는 어떤 식 으로든 방해가되지 않으며 실제로 유지 가능한 코드 기반을 훨씬 쉽게 생성 할 수 있습니다.

GIT와 같은 DVC를 사용해도 중앙 저장소에 정기적으로 커밋하는 것을 막을 수는 없습니다. 그러나 중간 커밋을 로컬로 커밋하고 완료되면 중앙 저장소로만 변경할 수 있음을 의미합니다.

이렇게하면 다른 개발자를위한 빌드를 깨지 않고 기능을 중간에 구현할 때에도 소스 제어의 이점이 있습니다.

Hudson과 같은 지속적인 통합 도구는 DVC를 지원하므로 분산 버전 제어와 지속적인 통합을 조정할 수 있다고 생각합니다.

먼저, 주제 지점 워크 플로우 CI와 같은 워크 플로를 사용하는 DVC의 경우 덜 필요할 수 있다고 생각합니다. 둘째, 준비가되었을 때 푸시하는 (단일, 중앙) 연속 통합 저장소를 설정하고 CI를 수행 할 수 있습니다.


07-08-2009 추가 :

예를 들어 참조하십시오 지속적인 통합 스프링 청소 Github 블로그에 게시하십시오.

내가 찾은 두 가지 아이디어는 이것을 설명하는 데 도움이됩니다.

  • DVC는 병합에서 별도의 커밋입니다.
  • CI는 선택한 저장소에 대해 실행됩니다.

따라서 문제의 핵심은 CI 도구를 실행하려는 저장소로 합병을 어떻게 만들어 지는가입니다. 시작할 때 하나의 저장소를 갖도록 선택할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top