GitHub Flow triển khai vào sản xuất trước khi hợp nhất thành chủ: sẽ không có tính năng thứ hai ghi đè lên tính năng thứ nhất?


8

Theo cách hiểu của GitHub Flow, như đã thấy ở đây , một tính năng, sau khi xem xét mã, lần đầu tiên được triển khai để sản xuất, sau đó được hợp nhất thành chủ.

Nếu có một tính năng thứ hai được phân nhánh từ cùng một cam kết như tính năng đầu tiên và cũng được triển khai thẳng vào sản xuất, thì việc sản xuất sẽ không còn chứa tính năng đầu tiên.

tính năng đầu tiên được hợp nhất thành chủ

được thực hiện tại learngitbranching.js.org

Khi c2 được triển khai, làm thế nào c3 có thể được triển khai trước khi hợp nhất với c2 hoặc c4?

GitHub Flow xử lý vấn đề này như thế nào?

Một giải pháp rõ ràng sẽ là yêu cầu một tính năng phải được khởi động lại thành chủ trước khi nó được triển khai để sản xuất. Tuy nhiên, điều này dễ bị lỗi của con người. Nếu một người quên rebase, sản xuất hiện đang thiếu một tính năng.

Tôi đặc biệt đánh giá cao câu trả lời từ những người có kinh nghiệm sử dụng GitHub Flow. Làm thế nào để bạn không có vấn đề này?

Câu trả lời:


1

Tin tốt! GitHub có một bài viết về nó!

Họ xác định ba biện pháp an toàn:

  • Hãy chắc chắn rằng nó vượt qua các bài kiểm tra của nó. Đây là hy vọng là một phần của hầu hết các quy trình triển khai. Nhưng, đó là một trong những biện pháp "an toàn" mà họ nhấn mạnh.
  • "Khóa" đường ống triển khai khi cần: Khi một nhánh tính năng đang được triển khai hoặc xác minh khi sản xuất, không ai khác có thể bắt đầu triển khai.
  • Đảm bảo rằng mọi nhánh được triển khai đều chứa mọi thay đổi đã được triển khai. Làm thế nào điều này được thực hiện là một chút phức tạp hơn. Đây là những gì họ nói:

Chúng tôi sử dụng API GitHub để xác minh yêu cầu này. Một điểm cuối trên ứng dụng github.com cho thấy SHA1 hiện đang chạy trong sản xuất. Chúng tôi gửi API này cho API so sánh GitHub để có được "cơ sở hợp nhất", hoặc tổ tiên chung, của chủ và SHA1 sản xuất. Sau đó, chúng ta có thể so sánh điều này với chi nhánh mà chúng tôi đang cố gắng triển khai để kiểm tra xem chi nhánh có bị bắt kịp không. Bằng cách sử dụng tổ tiên chung của chủ và sản xuất, mã chỉ tồn tại trên một nhánh có thể được loại bỏ khỏi sản xuất và các thay đổi đã hạ cánh trên chủ nhưng chưa được triển khai sẽ không yêu cầu các chi nhánh hợp nhất chúng trước khi triển khai.

Nếu hóa ra nhánh nằm phía sau, chủ sẽ tự động được sáp nhập vào nó. Chúng tôi thực hiện điều này bằng cách sử dụng API API kết hợp mới mà chúng tôi cung cấp ngày hôm nay. Sự hợp nhất này bắt đầu một bản dựng CI mới giống như bất kỳ sự kiện kiểu đẩy nào khác, bắt đầu triển khai khi nó đi qua.

API hợp nhất về cơ bản thực hiện hợp nhất tiêu chuẩn - nhưng thực hiện phía máy chủ.

Giải pháp của bạn có lẽ không cần phải quá phức tạp. Vào cuối ngày, bạn chỉ cần đảm bảo hợp lý rằng:

  • Bài kiểm tra đạt
  • Mỗi lần chỉ có một người triển khai
  • Master được sáp nhập vào các nhánh tính năng trước khi triển khai

Nhóm của tôi quyết định hợp nhất để làm chủ trước khi triển khai vào sản xuất. Không có chi nhánh nào được hợp nhất thành chủ trừ khi nó dựa trên chủ. Sau khi hợp nhất, tất cả các nhánh chưa hợp nhất khác (các tính năng vẫn đang được tiến hành) phải chuyển sang chủ trước khi chúng đủ điều kiện để xem xét mã, kiểm tra (thủ công và theo kịch bản) và cuối cùng được hợp nhất thành chủ. Khi một tính năng là chính, nó giống như trong prod, bởi vì chủ có thể được triển khai bất cứ lúc nào.
DarkSigma

Có vẻ như đó là một ý tưởng tồi khi triển khai một ứng dụng cho Sản xuất chưa được hợp nhất với nhánh chính. Bạn sẽ nghĩ rằng nếu bạn đang chuyển nó sang Sản xuất, bạn đã kiểm tra sự thay đổi trong môi trường thử nghiệm. Nếu nó thất bại trong Prod, chỉ cần quay lại bản phát hành trước. Tôi chắc chắn Github có lý do của họ, nhưng có vẻ như rất nhiều việc làm thêm và có thể dẫn đến một tình huống mà bạn không biết cái gì thực sự trong Sản xuất. Hợp nhất với chủ không phải lúc nào cũng tốt nếu có xung đột, vì vậy bạn có thể có mã trong Prod không khớp với những gì bạn dự định ...
Erik Pearson

@ErikPearson Tôi nghĩ rằng ý tưởng là bạn cần ít nhất phải có chủ được sáp nhập vào nhánh tính năng trước. Hệ thống xây dựng của bạn sẽ không cho phép bạn triển khai một chi nhánh không thể trộn lẫn. ... Tất nhiên là đầu cơ. Tôi không thực sự sử dụng quy trình công việc này. Nhưng, nó không có vẻ khủng khiếp đối với tôi với công cụ phù hợp .
Svidgen

0

Vấn đề này đã xảy ra với bạn hay nó là một câu hỏi lý thuyết?

Git là "đủ thông minh" khi hợp nhất để chỉ đẩy mã thay đổi, nếu có "vấn đề", nó sẽ cung cấp cho bạn một xung đột hợp nhất.

Mọi tính năng mới đều dựa trên nhánh phát triển mà chúng tôi không dựa trên các tính năng khác.

Một điều chúng tôi làm để giảm thiểu xung đột hợp nhất là hợp nhất thường xuyên và trước khi bạn bắt đầu một tính năng luôn kéo theo sự phát triển mới nhất. (chúng tôi không bao giờ cam kết làm chủ mà luôn luôn là một nhánh phát triển, nó sẽ được hợp nhất một lần trong một nhánh


2
Bạn hiểu nhầm câu hỏi của tôi. Đây không phải là về xung đột hợp nhất và không có chi nhánh phát triển. Tôi hỏi về luồng Git Hub (xem liên kết). Nhóm của tôi muốn sử dụng quy trình công việc này, nhưng không hiểu tại sao chúng tôi sẽ triển khai một tính năng chưa hợp nhất. Tuy nhiên, điều đó dường như là một sự đổi mới của dòng chảy này
DarkSigma

Luôn có một nhánh phát triển. Có vẻ như bạn đang gọi chi nhánh phát triển của mình là "chủ nhân".
gnasher729
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.