Các nhà phát triển bị chặn bằng cách chờ mã để hợp nhất từ ​​một chi nhánh khác bằng GitFlow


17

Nhóm chúng tôi vừa thực hiện chuyển đổi từ FogBugz & Kiln / Mercurial sang Jira & Stash / Git. Chúng tôi đang sử dụng mô hình Git Flow để phân nhánh, thêm các nhánh con ra khỏi các nhánh tính năng (liên quan đến các nhiệm vụ Jira của các tính năng Jira). Chúng tôi đang sử dụng Stash để chỉ định người đánh giá khi chúng tôi tạo yêu cầu kéo để hợp nhất trở lại vào nhánh cha (thường phát triển nhưng cho các nhiệm vụ trở lại vào nhánh tính năng).

Vấn đề chúng tôi tìm thấy là ngay cả với việc lập kế hoạch và phân tích các trường hợp tính năng tốt nhất, khi nhiều nhà phát triển đang làm việc cùng một tính năng, hãy nói về front-end và back-end, nếu họ đang làm việc với mã phụ thuộc lẫn nhau trong các nhánh riêng biệt, một nhà phát triển sẽ chặn người kia.

Chúng tôi đã cố gắng kéo giữa các chi nhánh của nhau khi chúng tôi phát triển. Chúng tôi cũng đã thử tạo các nhánh tích hợp cục bộ mà mỗi nhà phát triển có thể lấy từ nhiều nhánh để kiểm tra sự tích hợp khi họ phát triển. Cuối cùng, và điều này dường như có thể hoạt động tốt nhất cho chúng ta cho đến nay, mặc dù với chi phí cao hơn một chút, chúng tôi đã cố gắng tạo một nhánh tích hợp từ nhánh tính năng ngay lập tức. Khi một nhánh con (ngoài nhánh tính năng) đã sẵn sàng cho yêu cầu kéo và xem xét mã, chúng tôi cũng sẽ hợp nhất các bộ thay đổi đó vào nhánh tích hợp tính năng này. Sau đó, tất cả các nhà phát triển quan tâm có thể kéo từ nhánh tích hợp đó vào các nhánh con phụ thuộc khác. Điều này ngăn không cho bất kỳ ai chờ đợi bất kỳ chi nhánh nào mà họ phụ thuộc để vượt qua đánh giá mã.

Tôi biết đây không nhất thiết là vấn đề Git - nó liên quan đến việc làm việc với mã phụ thuộc lẫn nhau trong nhiều nhánh, pha trộn với quá trình làm việc và văn hóa của chính chúng ta. Nếu chúng tôi không có chính sách rà soát mã nghiêm ngặt để phát triển (nhánh tích hợp thực sự) thì nhà phát triển 1 có thể hợp nhất để phát triển cho nhà phát triển 2. Một điều phức tạp khác là chúng tôi cũng được yêu cầu thực hiện một số thử nghiệm sơ bộ như một phần của quy trình xem xét mã trước khi chuyển tính năng này cho QA. Điều này có nghĩa là ngay cả khi nhà phát triển front-end 1 đang trực tiếp rút khỏi chi nhánh của nhà phát triển back-end 2 khi họ đi, nếu nhà phát triển back-end 2 kết thúc và yêu cầu kéo của anh ấy / cô ấy đang chờ xem xét mã trong một tuần, thì về mặt kỹ thuật, nhà phát triển front-end 2 về mặt kỹ thuật không thể tạo yêu cầu kéo / đánh giá mã của anh ấy bởi vì người đánh giá mã của anh ấy / cô ấy không thể kiểm tra vì nhà phát triển back-end 2 '

Điểm mấu chốt là chúng ta đang tìm cho mình một cách tiếp cận nhiều hơn là cách tiếp cận song song trong các trường hợp này, tùy thuộc vào tuyến đường chúng ta đi và muốn tìm một quy trình sử dụng để tránh điều này.

Điều cuối cùng tôi sẽ đề cập là chúng tôi nhận ra bằng cách chia sẻ mã trên các chi nhánh chưa được xem xét và hoàn thiện mã nhưng về bản chất chúng tôi sử dụng mã beta của người khác. Ở một mức độ nhất định, tôi không nghĩ rằng chúng ta có thể tránh điều đó và sẵn sàng chấp nhận điều đó ở một mức độ nào đó.


Chỉ cần xác minh - đánh giá mã đang được thực hiện trên nhiệm vụ hợp nhất với tính năng? và không có đánh giá mã về hợp nhất tính năng để phát triển?

Nó phụ thuộc. Chúng tôi có một nguyên tắc nhỏ là không có trường hợp Jira nào tương ứng với một chi nhánh mà chúng tôi trực tiếp kiểm tra mã và điều đó không hoạt động như một trường hợp "ô" theo nghĩa phân cấp mất hơn 2 ngày. Vì vậy, nếu một trường hợp tính năng mất <= 2 ngày, thì sẽ có một đánh giá mã để hợp nhất tính năng cần phát triển. Nếu có các nhiệm vụ, một khi tất cả chúng được hợp nhất vào vé tính năng của chúng, ai đó sẽ thực hiện yêu cầu kéo để hợp nhất nhánh tính năng đó để phát triển, nhưng không phải là cùng một cấp độ đánh giá mã, vì tất cả các nhiệm vụ đã trải qua quá trình đó.
sương mù

Câu trả lời:


11

Vấn đề cũng có thể nằm ở sự phân tách nhiệm vụ quá cứng nhắc giữa phát triển back-end và front-end.

Nếu nhà phát triển giao diện người dùng cần API mới, không thể cho phép anh ta hoặc cô ta tạo API giả ở mặt sau (ví dụ luôn trả về cùng một giá trị) để xác thực bố cục? Sau đó, cam kết thực hiện một phần với một sơ khai và trong lần thứ hai, nhà phát triển back-end sẽ triển khai tính năng thực sự.

Bằng cách phá vỡ sự phụ thuộc, bạn sẽ có được một luồng tốt hơn và bạn không dừng mọi thứ chờ đợi cho một nhiệm vụ duy nhất hoạt động như một nút cổ chai.


Tôi đã nghĩ về điều này, nhưng nó không phải là một phần của quá trình phát triển hiện tại của chúng tôi và là chi phí phụ. Tuy nhiên, tôi không nghĩ rằng vấn đề hoàn toàn là nhà phát triển front-end không thể truy cập mã của nhà phát triển back-end để kiểm tra trong quá trình phát triển. Đó là thông tin thêm về các nhà đánh giá mã đang thực hiện kiểm tra khói cho toàn bộ tích hợp (không có gì bị chế giễu hoặc sơ khai) trước khi chúng tôi gửi nó đến QA.
sương mù

6
Mặc dù đây không phải là một phần của quá trình phát triển của bạn, nhưng đây có phải là bất kỳ chi phí phụ nào ngoài việc hai nhà phát triển xoay tròn ngón tay cái của họ trong ba ngày chờ đợi người khác cam kết mã của họ không? Bạn đã có 8 giờ lãng phí thời gian dành cho nhà phát triển trên mỗi ngón tay cái. So sánh với thời gian cần thiết để loại bỏ các phụ thuộc phụ trợ.
Greg Burghardt

5

Vấn đề của bạn: Nhà phát triển A chi nhánh từ Master, nhà phát triển B chi nhánh từ Master, cả hai đều hoạt động trên các tính năng liên quan chặt chẽ và thực tế là việc sáp nhập vào chi nhánh Master rất khó khăn vì những xung đột không thể tránh khỏi là điều khiến mọi người phải kìm hãm.

Nếu điều này là có thể thấy trước, thì trước tiên A và B có thể tạo một nhánh chung, sau đó mỗi nhánh cho công việc riêng biệt của chúng từ nhánh chung này, hợp nhất từng công việc riêng biệt của chúng vào nhánh chung và bây giờ bạn có một nhánh không xung đột nhiều dễ dàng hòa nhập hơn


0

Nếu nhà phát triển 1 hoạt động trên tính năng A và nhà phát triển 2 hoàn thành hoạt động trên tính năng B phụ thuộc vào tính năng A, thì không có cách nào khác - tính năng hợp nhất B đang bị tạm dừng. Bạn không thể kiểm tra tính năng này nếu không có tính năng A và không có điểm nào để xem xét tính năng này vì tiến bộ trong tính năng A có thể dẫn đến thay đổi tính năng B.

Tuy nhiên, điều đó không có nghĩa là nhà phát triển 2 đang bị trì hoãn! Nhà phát triển 2 có thể bắt đầu làm việc trên tính năng C và quay lại chu trình sửa lỗi đánh giá của tính năng B sau khi tính năng A hoàn tất. Tôi biết rằng chuyển đổi bối cảnh không phải là tối ưu, nhưng kể từ thời điểm đó nó sẽ làm để hoàn thiện tính năng A được thể tính bằng ngày nó không phải xấu (bạn không phải kéo họ ra khỏi "The Zone" cho 15 phút phụ nhiệm vụ)


Chắc chắn, nhưng điều này không hoàn toàn là vấn đề. Đó là nhiều hơn về một tính năng duy nhất, quá trình trở nên tuần tự hơn một chút so với nó. Nếu chúng tôi dự kiến ​​phát hành một tính năng vào ngày x và vé không thể được xem xét song song, điều đó sẽ khiến ước tính của chúng tôi bị tắt và có khả năng đẩy ra việc phát hành.
sương mù

0

Một điều bạn có thể làm để giúp tình hình là hãy xem xét các cách để rút ngắn chu kỳ phát triển.

Trong trường hợp nhà phát triển đang chờ đợi một tính năng từ nhà phát triển khác, có cách nào một phần các nhà phát triển đầu tiên làm việc có thể trải qua đánh giá và tích hợp trước toàn bộ tính năng để giải phóng khối không?

Có cách nào để chia các tính năng thành các đơn vị công việc nhỏ hơn để duy trì chu kỳ tích hợp không?

Ngoài ra, quá trình tích hợp mất bao lâu? Nếu có một vòng quay dài trên một bản dựng hoặc tích hợp, điều đó có thể làm chậm toàn bộ hàng đợi. Xem nếu có bất cứ điều gì bạn có thể làm để tăng tốc thời gian xây dựng để hàng đợi được giải phóng nhanh hơn.


Đây là những gì hy vọng chính của tôi là. Tôi không nghĩ chúng ta có thể loại bỏ vấn đề nhưng bằng cách thoải mái hơn với quy trình làm việc mới, tôi hy vọng chúng ta sẽ cải thiện kế hoạch và phá vỡ công việc của mình một cách hợp tác trong hệ thống mới này để giảm thiểu vấn đề. Tuy nhiên, chỉ kiểm tra xem có ai gặp phải bất cứ điều gì tương tự không, và có bất cứ điều gì khôn ngoan về quy trình hoặc liên quan đến mô hình phân nhánh mà chúng tôi đang sử dụng có thể giúp ích. Cảm ơn.
sương mù
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.