문제

이 게시물은 여기에분기가있는 중간 크기의 프로젝트에서 데이터베이스 개정을 어떻게 관리합니까?)는 분기 및 배포, 준비 및 제작 (로컬 카피와 함께)을 사용하여 웹 프로젝트에서 가장 잘 작동하는 방법을 궁금해했습니다.

우리는 "릴리스"자체가 없습니다. 기능이 눈에 띄게 충분히 커지면 (필수 테스트/등에 필요한 후에) 라이브를 푸시합니다. 그 사람들은 살고 있습니다. 목표는 지속적으로 이동하는 사이트가 사용자를 약간 불안하게 만드는 경향이 있기 때문에 한 달에 한 번 또는 두 번 이상 배포되지 않는 것입니다.

우리가하는 방법은 다음과 같습니다. 그리고 그것은 일종의 취성감을 느낍니다 (현재 SVN을 사용하지만 GIT 로의 전환을 고려하는 것) :

  1. 두 개의 "분기" - 트렁크로 표시된 스테이지의 주어진 릴리스와 함께 DEV 및 무대
    • 개발자는 모든 변경에 대한 트렁크 사본을 확인하고 지점을 만듭니다.
    • 개발자는 로컬로 일하며 코드를 자주 확인합니다 (투표와 마찬가지로 조기 및 자주)
    • 개발자가 편안하지 않으면 완전히 깨지지 않으면 분기를 Dev와 병합하고 개발 사이트에 배포하십시오.
    • 변경이 "완료"될 때까지 필요에 따라 3-4를 반복하십시오.
    • 스테이징과 변경 분기를 병합하고 무대 사이트에 배포하십시오. 최종 테스트를 기대하십시오.
    • 일정 기간이 지나면 스테이지의 주어진 수정을 트렁크로 표시하고 트렁크를 생중계합니다.
    • 트렁크 변경을 다시 Dev로 병합하여 동기화로 유지하십시오.

이제 이러한 단계 중 일부는 손으로 흔들리는 상당한 복잡성을 가지고 있으며 실제로는 매우 어렵습니다 (Trunk-> Dev Always Always Breaks). 그래서 더 나은 방법이 있다고 상상해야합니다.

생각?

도움이 되었습니까?

해결책

작업이 제 시간에 완료되지 않을 것으로 예상되면 분기가 편리하며 지속적인 통합 작업을 수행하기에 충분한 테스트가 없습니다. 나는 프로그래밍 작업이 예측할 수 없을 정도로 너무 커서 매장에서 지점 크레이프 개발을 보는 경향이 있으므로 경영진은 출시 직전까지 기다리기 위해 경영진이 어떤 기능을 배송 해야하는지 결정하기를 원합니다. 그런 종류의 작업을 수행하는 경우 모든 작업 디렉토리가 자연스럽게 지점 인 분산 버전 컨트롤을 사용하는 것을 고려할 수 있습니다. 트렁크 외부의 다른 개발자와 교차 관리 할 수도 있습니다.

내가 선호하는 것은 우리가 릴리스 후보를 위해 분기와 함께 불안정한 트렁크에서 일할 때, 그 후 릴리스에 태그가 지정된 다음 비상 패치의 스트림이됩니다. 이러한 시스템에서는 3 개 이상의 지점 (마지막 릴리스, 현재 릴리스 후보, 불안정한 트렁크)이 거의 없습니다. TDD를하고 불안정한 트렁크에 CI를 가지고 있다면 이것은 작동합니다. 또한 모든 작업을 분해 해야하는 경우 원하는만큼 자주 코드를 전달할 수 있습니다 (일반적으로 작업은 1-2 일에 불과하며 기능을 구성하는 다른 모든 작업 없이는 공개 할 수 있습니다). 따라서 프로그래머는 작업을하고, 트렁크를 체크 아웃하고, 작업을 수행하고, 동기화하고 모든 테스트가 통과 할 때마다 체크인합니다. 불안정한 트렁크는 항상 릴리스 후보 (모든 테스트가 통과되는 경우)으로 분기에 항상 사용할 수 있으므로 릴리스가 이벤트가 아닌 것입니다.

전반적으로, 더 나은 수단 : 분기가 적고, 더 짧은 작업, 더 짧은 시간, 출시 시간, 더 많은 테스트.

다른 팁

명백한 생각은 더 "Rebase"( "부모"환경 단계에서 "자식"환경 "Dev로 개발자 지점으로 더 자주 병합 될 것입니다. 더 이상.

즉, 무대에서 수행 된 모든 일은 한 번에 생산에 들어가야하는 모든 일 (트렁크)은 Dev 및 Private Devs Branch에서 가능한 한 빨리 병합되어야합니다.

그러나 위의 병합 워크 플로가 너무 불편합니다. 릴리스 직후 (새로운 트렁크) 직후 최신 개발자를 기반으로 Rebase 브랜치를 제안합니다. Rebase Trunk-> dev는 모든 문제가 해결되는 트렁크-> Rebase가 될 것입니다. 그리고 최종 합병 Dev-> Rebase는 현재 DEV가 새로운 업데이트 시스템과 호환되는지 확인합니다. 최종 사소한 병합은 Rebase에서 Dev (및 개인 개발 분기)로 돌아 가면 프로세스가 완료됩니다.
지점의 요점은 다른 현재 개발 노력과 함께 수행 할 수없는 개발 노력을 격리하는 것입니다. Trunk-> Dev가 현재 개발자와 함께 가기에 너무 복잡한 경우 분리해야합니다. 따라서 'Rebase'브랜치 제안.

우리는 내가 일하는 상점에서 SVN을 사용합니다. C ++ 개발을 수행하는 동안 버전 관리는 매우 보편적입니다. 다음은 우리의 접근 방식입니다. 귀하는 귀하의 접근 방식에 합리적인 것을 결정할 수 있습니다.

우리에게는 모든 개발이 지점에서 발생합니다. 우리는 모든 버그와 모든 기능에 대해 분기합니다. 이상적으로는 그 지점은 단지 1 기능에 전념하지만 때로는 의도되지 않습니다.

작업이 완료, 테스트 및 "준비"되면 변경 사항을 트렁크로 병합합니다. 우리의 규칙은 트렁크가 코드를 깨뜨린 적이 없어야한다는 것입니다. 깨진 코드가 트렁크로 들어가면 우선 순위가됩니다.

릴리스는 기능이 모두 완료되고 병합 될 때 이루어집니다. 릴리스의 지점은 태그와 같이 생성됩니다. 태그를 사용하면 필요한 경우 검색 할 수 있습니다. 이 분기는 우리의 이전 버전 지원을 허용합니다. 릴리스 버전에서 버그를 수정하는 것은 해당 릴리스의 지점으로 이동하여 분기됩니다. 모든 것이 잘되면 변경 사항은 릴리스의 지점으로 다시 병합되며 원하는 경우 트렁크까지 연결됩니다.

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