Có một chi nhánh sản xuất hoặc sử dụng tổng thể?


16

Tôi làm việc trong nhóm nhỏ với các nhà phát triển từ xa khác trên một Railsứng dụng. Chúng tôi đang bắt đầu sửa đổi gitquy trình làm việc của chúng tôi . Chúng tôi đã nghĩ về một cấu trúc phân nhánh như dưới đây:

(dev) -> (qa) -> (stag) -> (master)

Nhưng một số nhà phát triển nghĩ rằng nó có thể ít gây nhầm lẫn hơn cho các nhà phát triển mới, những người có thể tự động đẩy sang sản xuất trên bản gốc. Thay vào đó, họ nghĩ rằng để mọi người làm việc với chủ và tạo ra một chi nhánh riêng để sản xuất.

(master) -> (qa) -> (stag) -> (prod)

Tôi được dạy rằng bạn muốn giữ cho chủ có thể triển khai và không sử dụng nó như là sự phát triển và từ những nơi trước đây, nơi tôi đã làm việc, chủ luôn có nghĩa là có thể triển khai để sản xuất.

Điều gì sẽ là một số nhược điểm của việc sử dụng cấu trúc rẽ nhánh trong đó chủ được sử dụng tích cực để phát triển và một nhánh prod riêng biệt là những gì bạn sử dụng để triển khai?

git 

Theo kinh nghiệm của tôi, sẽ có một nơi mà mọi người có thể cam kết theo ý muốn (có thể là để kiểm tra hàng ngày hoặc bất cứ điều gì) - không có yêu cầu cho "luôn luôn biên dịch". Không có điều đó, mọi người trì hoãn việc đăng ký và có nguy cơ mất mã trong các vụ tai nạn (ví dụ như sự cố đĩa). Sau đó, tùy thuộc vào họ để tuyên truyền một phiên bản có ý nghĩa từ đó và "phát hành nó" theo hướng tích hợp. Vì vậy, tập hợp các giai đoạn ưa thích của tôi là (dev) -> (đơn vị) -> (tích hợp) -> (thử nghiệm) -> (sản xuất)
BitTickler

2
Chúng tôi sử dụng thành công quy trình công việc git được mô tả tại trang web này với một vài điểm khác biệt. nvie.com/posts/a-successful-git-branching-model Sự khác biệt duy nhất là chúng tôi thích chi nhánh đè bẹp địa phương vào phát triển một để mantain một histori sạch và làm theo logic "một cam kết, một trong những vấn đề"
Jepessen

Điều gì thường xảy ra trên nhánh "con nai" của bạn?
simgineer

đề nghị cho CI / CD rõ ràng hơn. nhánh chủ không được sử dụng vì nó có thể bị thất lạc. {phát triển} - {đơn vị} - {tích hợp} - {dàn dựng} - {sản xuất}. trong màu xanh / xanh có sản xuất liên tục xây dựng> lát hoạt động và dàn> lát không hoạt động. ĐẦU> phát triển chi nhánh nơi các tính năng được phân nhánh. phát triển có webhooks để kích hoạt các bản dựng theo hướng đơn vị tiến tới tích hợp và dàn dựng (với các thẻ thích hợp khi chuyển tích hợp). hotfix hướng tới phát triển + sản ​​xuất (hiếm khi xảy ra). phức tạp hơn nhưng một ý tưởng chung.
Jimmy MG Lim

Câu trả lời:


16

Không có bất kỳ lợi thế cũng như bất lợi cho phương pháp này. Lý do tôi nói điều này rất đơn giản: với Git, sẽ không có gì khác biệt nếu bạn phát triển từ chủ hoặc phát hành từ chủ. Bạn thậm chí không cần phải phát hành chi nhánh; thay vào đó, bạn có thể gắn thẻ một cam kết tùy ý và phát hành nó.

Các thực rắc rối ở đây là một trong những quy trình và thủ tục. Các nhà phát triển cấp cao hơn lo ngại rằng thực hiện theo một cách sẽ gây nhầm lẫn cho các nhà phát triển mới hơn cần phải chuẩn bị đầu tư thời gian để giải thích mô hình phát hành là gì và tại sao lại như vậy.

Miễn là mọi người hiểu rằng chủ là để phát triển, và một số nhánh tùy ý khác là để phát hành, và công việc để duy trì điều này được thực hiện , thì không nên có bất kỳ vấn đề nào với phương pháp này.


1
Tôi thực sự nghĩ rằng bạn đạt được một điểm tốt. Cảm ơn vì bạn đã phản hồi.

+1 để gắn thẻ cam kết. Tôi làm việc một mình hầu hết thời gian, nhưng tôi gắn thẻ phát hành vì hai lý do. 1) Nó hoạt động tuyệt vời với các công cụ lịch sử git trực quan để hiển thị các cam kết đã thực sự được sản xuất. 2) Nó hoạt động rất tốt với các công cụ như GitHub có thể đóng gói các phiên bản phát hành bằng cách kiểm tra cam kết được gắn thẻ và đóng gói vào một tệp zip để tiêu thụ.
ngủ gật

9

Tôi có thể thấy tình trạng khó xử của bạn. Tôi cũng đã có nó, cho đến khi tôi không học được những gì tôi luôn giả định về chủ.

Tôi được dạy rằng bạn muốn giữ cho chủ có thể triển khai và không sử dụng nó như là sự phát triển và từ những nơi trước đây, nơi tôi đã làm việc, chủ luôn có nghĩa là có thể triển khai để sản xuất.

Từ tài liệu / sách của Git - Phân nhánh Git

Chi nhánh chính của thành phố ở thành phố Git không phải là một chi nhánh đặc biệt. Nó chính xác như bất kỳ chi nhánh khác. Lý do duy nhất gần như mọi kho lưu trữ đều có một là vì lệnh git init tạo nó theo mặc định và hầu hết mọi người không bận tâm thay đổi nó.

Vì vậy, nếu bạn có một quy trình làm việc ưa thích và rất khó để làm việc với nó vì các nhà phát triển khác nhau trong nhóm có những ý tưởng khác nhau master. Bạn thậm chí có thể xem xét đổi tên masterđể nói prodvà sử dụng quy trình làm việc như dưới đây -

(dev) -> (qa) -> (stag) -> (prod)

Đây là cách bạn thay đổi tên nhánh chính .

Tôi KHÔNG nói rằng bạn phải thay đổi mastertên chi nhánh. Nhưng nếu bạn có một quy trình công việc ưa thích và nó giúp thay đổi mastertên chi nhánh, hãy thực hiện bằng mọi cách :-)


Đó là một điểm rất tốt. Cảm ơn vì đã ướp mà lên. Tôi không biết liệu chúng ta sẽ đi xa đến mức đổi tên hay không nhưng thật tốt khi biết rằng git không đối xử với chủ nhân theo bất kỳ cách đặc biệt nào. Cảm ơn!

6

Tôi thích kiểm tra hơn các quy ước trong trường hợp này. Mỗi nhóm chứa thành viên giỏi hơn trong việc bắt đầu các tính năng mới và những người khác giỏi hơn trong việc ổn định mọi thứ để phát hành.

Nếu bạn thiếu cái sau, thì đánh giá mã sẽ giúp ích (thông thường, những người có kỷ luật hơn sẽ muốn đánh giá mã bằng mọi cách).

Đó là lý do tại sao chúng tôi định cấu hình repo Git của chúng tôi (chúng tôi đang sử dụng Gitlab) mà chỉ một số người nhất định mới có thể hợp nhất các yêu cầu kéo và mỗi nhà phát triển có được ngã ba riêng của repo chính.

Điều đó giải quyết hai vấn đề:

  1. Các nhà phát triển mới không thể thay đổi chi nhánh sai (vì họ không thể đẩy công việc của họ trực tiếp vào repo chính). Họ có thể đẩy mastervào repo của riêng mình nhưng điều đó sẽ được khắc phục khi yêu cầu kéo đến.

  2. Các quy ước mã nhanh chóng lan truyền trong nhóm vì mỗi cam kết được kiểm tra bởi ít nhất một người khác mang lại quan điểm và kiến ​​thức của họ.


1

Tất cả phụ thuộc vào quá trình phát triển phần mềm tổng thể. Quản lý cấu hình và làm thế nào một phiên bản mới sẽ không thể được xác định mà không biết về quy trình tổng thể.

Có phe "nhanh nhẹn", người sẽ chọn "khu vực cam kết đầu tiên luôn hoạt động". Họ sẽ chạy các cơ sở xây dựng và kiểm tra tự động liên tục chống lại khu vực đó và cố gắng có một hệ thống làm việc "mọi lúc".

Họ sẽ thấy (chủ) -> (phát hành) với tổ chức 1,2 bước trung gian có lợi.

Sau đó, có một phe "cổ điển" hơn, có một quá trình được thúc đẩy bởi các bước tích hợp và lập kế hoạch theo các mốc, trong đó một bản phát hành "đơn vị công việc" là một hoạt động có kế hoạch với các yêu cầu như "chỉ phát hành khi nó được thử nghiệm (đơn vị) và được cho là phù hợp với cột mốc kế hoạch tiếp theo ". Ở đó, kế hoạch bao gồm phiên bản của "đơn vị công việc" và thông thường họ đi vào chiều dài để xác định cách phát hành sản phẩm theo kế hoạch tiếp theo được cho là trông như thế nào về các tính năng và sửa lỗi. Vì mục đích lập kế hoạch, họ muốn biết rằng những gì nhà phát triển phát hành là "phù hợp" và hành động có ý thức cam kết một đơn vị công việc.

Cách tiếp cận cổ điển đó không có nghĩa là nhất thiết phải có thời gian dài hơn khi không có bản dựng sản phẩm hoàn chỉnh.

Vì vậy, quy trình làm việc "cổ điển" sẽ là: (dev) -> (đơn vị) -> (tích hợp) -> (test / qa) -> (sản xuất).

Vai trò của nhà tích hợp là "chấp nhận / mua" các đơn vị được phát hành hoặc từ chối chúng nếu chúng không phù hợp với nhu cầu của phiên bản sắp tới.

Đó là, trên một lưu ý phụ cũng có thể kết hợp 2 cách tiếp cận cơ bản đó theo những cách cơ hội.

Từ kinh nghiệm của tôi (chủ yếu trong lĩnh vực sử dụng phương pháp "cổ điển"), phương pháp "cổ điển" hoạt động tốt trong các dự án từ khoảng 4-50 người trong một nhó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.