Khi sử dụng Git, có nên sử dụng nhánh chính để phát triển tích cực không?


32

Trước tiên, một số nền tảng, chúng tôi đang trong quá trình chuyển tất cả các nhóm dự án của mình sang sử dụng git và đang trong quá trình đưa ra các hướng dẫn về cách tổ chức các kho lưu trữ để các chi nhánh nhất định cũng có thể được giám sát để tích hợp liên tục và tự động triển khai đến các máy chủ thử nghiệm. Hiện tại có hai mô hình đang phát triển:

  1. Bị ảnh hưởng nặng nề bởi bài viết của nvie.com về việc phân nhánh thành công với nhánh chính đại diện cho mã ổn định nhất, nhánh phát triển cho mã cạnh chảy máu và nhánh tích hợp cho mã đã sẵn sàng để kiểm tra QA.

  2. Một mô hình thay thế trong đó nhánh chính đại diện cho mã phát triển cạnh chảy máu, nhánh tích hợp cho mã đã sẵn sàng để thử nghiệm QA và nhánh sản xuất cho mã ổn định đã sẵn sàng để triển khai.

Tại thời điểm này, một phần là vấn đề ngữ nghĩa liên quan đến những gì nhánh chính đại diện, nhưng việc phát triển tích cực trên nhánh chính thực sự là một thực tiễn tốt hay nó không thực sự có liên quan?


1
Tôi thích worfklow mà Scott Chacon sử dụng để phát triển GitHub: scottchacon.com/2011/08/31/github-flow.html
user16764

1
Theo mô tả, dường như tôi là một vấn đề ngữ nghĩa nhiều hơn là không - bất kỳ tổ chức nào sẽ phát triển các quy trình của riêng họ và trong một số khía cạnh, các tên cần phải phản ánh quy trình làm việc của bạn. Nhìn chung, chìa khóa dường như là ở đâu đó bạn xác định một cái gì đó sao cho "mã nguồn của HEAD luôn phản ánh trạng thái sẵn sàng sản xuất". Những gì bạn chọn để gọi đó là ít quan trọng hơn nhưng cả luồng công việc git và luồng công việc GitHub tập trung vào sự tách biệt đó và kiểm soát khi bạn đẩy đến "điều" sẵn sàng sản xuất
Murph

@Murph - Đúng, nhưng vì chúng tôi đang thực hiện một số điều này từ đầu, tôi nghĩ rằng tốt nhất nên ít nhiều tuân theo các quy ước chung để các nhà phát triển mới được thuê không có đường cong học tập dốc do thực tiễn nội bộ bất thường.
rjzii

Sau đó, bạn đã trả lời câu hỏi của riêng mình (-: Thành thật ngay cả khi đặt câu hỏi bạn đang đi trước đường cong ...
Murph

Câu trả lời:


33

Tính năng xác định thực sự duy nhất của masterchi nhánh là nó là mặc định cho một số hoạt động. Ngoài ra, tên chi nhánh chỉ có ý nghĩa trong một kho lưu trữ cụ thể. Tôi mastercó thể trỏ đến của bạn development, ví dụ. Ngoài ra, một masterchi nhánh thậm chí không được yêu cầu, vì vậy nếu có bất kỳ sự nhầm lẫn nào về việc nên chọn chi nhánh nào, lời khuyên của tôi thường là loại bỏ nó hoàn toàn.

Tuy nhiên, theo tôi, cách tốt nhất để nghĩ về nó là mặc định để đẩy tới. Hầu hết mọi hướng dẫn trực tuyến mà nhà phát triển của bạn đọc sẽ cho rằng. Vì vậy, sẽ rất có ý nghĩa khi có masterbất cứ chi nhánh nào thường được đẩy tới. Một số người nghĩ rằng nó là bản sao nguyên sơ không thể chạm tới được cho các nhà phát triển ngoại trừ sau khi xem xét kỹ lưỡng nhất, nhưng sử dụng nó theo cách đó sẽ loại bỏ rất nhiều mặc định hữu ích mà git cung cấp. Nếu bạn muốn loại nhánh nguyên sơ đó, tôi sẽ đặt nó vào một kho lưu trữ hoàn toàn riêng biệt mà chỉ một số người có thể viết vào.


7
+1. Và bởi vì mã "sẵn sàng sản xuất" là mã quan trọng, nên nó cũng nằm trong một nhánh có tên làm nổi bật tầm quan trọng này. "Master" là tên nhánh mặc định chắc chắn không đáp ứng yêu cầu đó, vì nó cũng được sử dụng trong mọi kho lưu trữ khác cho bất kỳ ý định nào.
Tuneweizen

4
+1. Đây là câu trả lời thực tế. Để nhấn mạnh điểm: không ai trong nhóm của bạn xác định nhánh "chính", hệ thống git đã làm. Đối với bất cứ điều gì quan trọng, hãy bám vào các nhánh mà ai đó trong nhóm của bạn đã xác định.
Travis Wilson

1
Hoàn toàn đồng ý. Mặc dù tôi rất thích mô hình dòng chảy git ( nvie.com/posts/a-successful-git-branching-model ), nhưng điều duy nhất làm tôi băn khoăn là chủ nhân được dành riêng cho các bản phát hành, đó là phản trực giác.
Bachi

12

Không, không nên, ngay cả khi mới bắt đầu trước khi bạn đến QA. Là một thực tiễn tốt nhất, mô hình cho sự phát triển nên nhất quán từ đầu đến cuối. Nhánh chủ của bạn sẽ bắt đầu trống, bạn nên tách nhánh phát triển của mình ra và bắt đầu thêm tệp, hợp nhất vào nhánh tích hợp của bạn, sau đó đến chủ của bạn.

Mặc dù không ai có thể quan tâm trong quá trình phát triển mà chi nhánh chính không xây dựng, nhưng nó sớm cho vay những thói quen xấu. Bậc thầy phải luôn luôn xây dựng và đối với các bản phát hành tính năng chính, sẽ không phải là ý tưởng tồi khi lưu trữ các nhánh của các bản dựng chính để có thể quay lại các điểm phát hành ổn định nếu cần thiết.


3
Không phải là tốt hơn để làm theo dõi phiên bản thông qua các thẻ?
Adonis K. Kakoulidis

1
@AdonisK.: Tôi không thấy sự liên quan của câu hỏi của bạn.
Joel Etherton
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.