저는 최근에 회사에서 시작한 계약자입니다.
팀은 2 명의 중급 개발자로 구성된 3 명의 개발자이며 곧 같은 레벨의 다른 개발자와 나 자신 (6 년 xp)입니다. 기존 개발자 모두에게 대학 / 대학에서 첫 번째 직업이되었으며, 이전에는 자신의 업무를 감독하는 선임 개발자가 없었습니다.
명시적인 버전 관리 정책이 없습니다. 개발자는 트렁크에서 모든 개발을 수행 한 다음 개발 시스템에서 직접 프로덕션 환경에 배포합니다. 기존 팀은 분기에 익숙하지 않습니다.
이 모든 것을 바꾸고 CI, TDD 테스트 / 준비 / 프로덕션 서버 등을 버전 관리 정책과 함께 소개하고 있습니다.
소스 제어 시스템은 TFS이며, 이전에는 사용해 본 적이 없습니다. 하나의 거대한 저장소로 구성되어 있습니다.
나는 그들을 위해 몇 가지 조언을 작성했지만 팀의 경험을 염두에두고 추가 / 수정해야 할 것이 있습니까?
버전 관리 정책
트렁크에서 개발 완료
변경 사항이 일주일 이상 걸리는 것으로 예상되면 분기에서 분기를 수행해야합니다. 트렁크에서 분기로 정기적으로 병합하여 두 가지가 동기화되지 않도록합니다.
생산 코드를 위해 생성 된 릴리스 지점. 해당 분기에는 안정적인 코드 만 포함되어야합니다. 스프린트 당 한 번 트렁크에서 업데이트되는 릴리스 분기를 하나 또는 매주마다 별도의 릴리스 분기를 만들 수 있습니다.
프로덕션 코드에 영향을 미치는 긴급한 버그 수정이 필요한 경우 릴리스 분기에서 수정되어 트렁크로 다시 병합됩니다.
하나의 릴리스 브랜치 전략을 채택하면 스프린트 당 스프린트 끝을 향해 스프린트 당 한 번 트렁크가 릴리스 브랜치로 병합됩니다.
릴리스 당 별도 지점을 채택하면 트렁크가 릴리스 지점으로 병합되지 않습니다.
일부 시나리오에서는 분기가 너무 많이 분기 된 경우 다른 분기에서 버그를 두 번 수정해야 할 수 있습니다. 짧은 스프린트를한다면 너무 자주 발생해서는 안됩니다.
세 대의 서버를 보유 할 계획입니다. 항상 리포지토리에서 최신 코드를 실행하는 테스트 환경. 릴리스 후보 코드 및 UAT 목적을 준비 / 테스트하기위한 최신 릴리스 후보 및 프로덕션 환경을 실행하는 준비 환경.
내가 이것을 계획하는 이유는 지금까지 클라이언트가 내부 소프트웨어 만 수행했기 때문입니다. 최신 프로젝트는 유명 미디어 고객을위한 것이며 내 생각은 팀이 현재 수행하는 것보다 더 전문적인 개발 모델을 채택해야한다는 것입니다.
예를 들어, 현재 사용자는 버그 보고서로 팀에 전화를 걸 수 있습니다. 개발자는 버그를 찾아 수정하고 자체 머신에서 빠른 시선 테스트를 한 다음 바로 프로덕션 환경에 배포합니다. 자동화 된 테스트 또는 다른 것은 없습니다.
뒤늦게 살펴보면 기능 분기가 너무 멀다고 생각하고 제거하겠습니다.
따라서 본질적으로 a) 분기가 전혀 없음 b) 릴리스 분기 및 트렁크 c) 릴리스 및 트렁크 당 릴리스 분기
나는 후자를 향해 기울고 있었다. 내 초기 생각은 릴리스 후보와 릴리스가 동시에 별도의 서버 (UAT / 생산)에 있어야한다고 생각하지만 실제로 트렁크는 언제든지 특정 시점에 릴리스 후보이므로 릴리스는 미치도록 기울고있다. 내 생각은 이해 관계자가 개발 코드를 보지 못하게하려면 별도의 릴리스 후보 분기가 필요하지만 YAGNI와 그 모든 것이 필요하다는 것입니다.