Ưu và nhược điểm của git-flow so với github-flow là gì? [đóng cửa]


125

Gần đây chúng tôi đã bắt đầu sử dụng GitLab.

Hiện đang sử dụng quy trình làm việc "tập trung".

Chúng tôi đang xem xét chuyển sang github-flow nhưng tôi muốn đảm bảo.

Ưu và nhược điểm của git-flow so với github-flow là gì?

Câu trả lời:


133

Như đã thảo luận trong GitMinutes tập 17, bởi Nicholas Zakas trong bài viết của anh ấy về " Quy trình làm việc GitHub bên trong một công ty ":

Git-flow là một quy trình để quản lý các thay đổi trong Git do Vincent Driessen tạo ra và kèm theo một số phần mở rộng Git để quản lý luồng đó.
Ý tưởng chung đằng sau git-dòng chảy là có nhiều chi nhánh riêng biệt mà luôn luôn tồn tại, từng cho một mục đích khác nhau: master, develop, feature, release, và hotfix.
Quá trình phát triển tính năng hoặc lỗi diễn ra từ nhánh này sang nhánh khác trước khi cuối cùng được phát hành.

Một số người được hỏi chỉ ra rằng họ sử dụng git-flownói chung.
Một số bắt đầu với git-flowvà rời xa nó.

Lý do chính để chuyển đi là git-flowquá trình khó xử lý trong một mô hình triển khai liên tục (hoặc gần như liên tục).
Cảm giác chung là điều đó git-flowhoạt động tốt đối với các sản phẩm theo mô hình phát hành truyền thống hơn, nơi các bản phát hành được thực hiện vài tuần một lần, nhưng quá trình này bị phá vỡ đáng kể khi bạn phát hành mỗi ngày một lần hoặc hơn .

Nói ngắn gọn:

Bắt đầu với một mô hình càng đơn giản càng tốt (giống như dòng chảy của GitHub) và chuyển sang một mô hình phức tạp hơn nếu bạn cần.


Bạn có thể xem một minh họa thú vị về quy trình làm việc đơn giản , dựa trên GitHub-Flow tại:
" Mô hình phân nhánh git đơn giản ", với các yếu tố chính là:

  1. master phải luôn luôn có thể triển khai.
  2. tất cả các thay đổi được thực hiện thông qua các nhánh tính năng (pull-request + merge)
  3. rebase để tránh / giải quyết xung đột; hợp nhất vàomaster

https://a248.e.akamai.net/camo.github.com/9783623eba280ba5ace8b9e63842be52af2f0546/687474703a2f2f7374617469632e62656e65742e61692f736b697463682f666c6f739e32334311392ef739e33334311392ef739e32330311392


Để có một quy trình làm việc thực tế hoàn chỉnh và mạnh mẽ hơn, hãy xem gitworkflow (một từ) .


88

Không có quy trình làm việc viên đạn bạc nào mà mọi người nên tuân theo, vì tất cả các mô hình đều ở mức tối ưu. Phải nói rằng, bạn có thể chọn mô hình phù hợp cho phần mềm của mình dựa trên các điểm dưới đây;

Nhiều phiên bản đang được sản xuất - sử dụng Git-flow

Nếu mã của bạn có nhiều phiên bản đang được sản xuất (tức là các sản phẩm phần mềm điển hình như Hệ điều hành, Gói văn phòng, Ứng dụng tùy chỉnh, v.v.), bạn có thể sử dụng git-flow. Lý do chính là bạn cần liên tục hỗ trợ các phiên bản trước trong quá trình sản xuất trong khi phát triển phiên bản tiếp theo.

Phiên bản đơn trong phần mềm sản xuất đơn giản - sử dụng Github-flow

Nếu mã của bạn luôn chỉ có một phiên bản đang sản xuất (tức là các trang web, dịch vụ web, v.v.), bạn có thể sử dụng github-flow. Lý do chính là bạn không cần phải làm những thứ phức tạp cho nhà phát triển. Sau khi nhà phát triển hoàn thành một tính năng hoặc hoàn thành một bản sửa lỗi, nó ngay lập tức được thăng cấp lên phiên bản sản xuất.

Phiên bản duy nhất trong sản xuất nhưng phần mềm rất phức tạp - sử dụng Gitlab-flow

Phần mềm lớn như Facebook và Gmail, bạn có thể cần giới thiệu các nhánh triển khai giữa nhánh của bạn và nhánh chính nơi các công cụ CI / CD> có thể chạy, trước khi nó đi vào sản xuất. Ý tưởng là tăng cường bảo vệ cho phiên bản sản xuất vì nó được hàng triệu người sử dụng.


7
Chỉ cần thêm "Gitdmz-flow" / "Git DMZ Flow" vào danh sách: gist.github.com/djspiewak/9f2f91085607a4859a66
Robert Fey

1
Các công ty được tham chiếu sử dụng một hệ thống dựa trên đường trục. paulhammant.com/2014/01/08/…
PatrickWalker

1
Luồng Git DMZ giống với Gitflow hơn và nhánh DMZ giống nhánh phát triển. Do đó tôi cảm thấy không có gì đặc biệt về nó.
Gayan Pathirage

2
Theo hiểu biết của tôi, Git-Flow không hoạt động tốt với phiên bản nhiều sản phẩm. Chiến lược hotfix giả sử bạn chỉ có một phiên bản sản xuất và bạn thực hiện hotfix trên nhánh phát hành tương ứng (và sau đó hợp nhất nó lại để phát triển nhánh). Có vẻ như không phục vụ cho cách bạn có thể sửa một lỗi tồn tại trong nhiều nhánh sản xuất.
Adrian Shum

5
@GayanPathirage Thực ra không phải vậy. 1. Thẻ GitFlow "cổ điển" ở chế độ chính. Nhánh hotfix chỉ dành cho bạn để sửa chữa phiên bản sản xuất mới nhất (từ chính). 2. "release branch" có nghĩa là một cái gì đó khác trong Gitflow, đây thực sự là nhánh xem trước trước khi phát hành (phân nhánh từ nhánh phát triển và nhằm mục đích hợp nhất thành master khi nó thực sự được phát hành). 3. Những gì bạn đang đề cập đến là một thứ được gọi là "nhánh hỗ trợ" trong GitFlow (Đó là một lý do tôi không thích GitFlow: thuật ngữ độc đáo). Tuy nhiên, đó vẫn là quy trình thử nghiệm (vì vậy bạn không thấy nó trong hầu hết các Intros Gitflow)
Adrian Shum

38

Tôi đã sử dụng mô hình git-flow hơn một năm và nó ổn.

Nhưng nó thực sự phụ thuộc vào cách ứng dụng của bạn sẽ được phát triển và triển khai.

Nó hoạt động tốt khi bạn có một ứng dụng có luồng phát triển / triển khai chậm.

Nhưng ví dụ: như GitHub, chúng tôi có một ứng dụng có quy trình phát triển / triển khai nhanh, chúng tôi triển khai hàng ngày và đôi khi vài lần một ngày, trong trường hợp này, git-flow có xu hướng làm chậm mọi thứ theo quan điểm của tôi và tôi sử dụng GitHub lưu lượng.

Điều khác cần xem xét là git-flow không phải là git tiêu chuẩn, vì vậy bạn có thể, và khi tôi nói bạn có thể, ý tôi thực sự là, bạn sẽ tìm thấy các nhà phát triển không biết nó, và sau đó là đường cong học tập, hơn thế nữa cơ hội để làm rối tung mọi thứ. Cũng như đã đề cập ở trên, ai đó đã phát triển một bộ tập lệnh để giúp việc sử dụng git-flow dễ dàng hơn, vì vậy bạn không cần phải nhớ tất cả các lệnh, nó sẽ hỗ trợ bạn với các lệnh, nhưng việc ghi nhớ luồng thực tế là công việc của bạn. , Tôi đã nhiều lần bắt gặp một nhà phát triển không biết liệu đó có phải là một hotfix hay tính năng hay không, hoặc thậm chí tệ nhất là khi họ không thể nhớ quy trình và nội dung.

Có ít nhất một GUI hỗ trợ git-flow cho Mac và Windows SourceTree .

Ngày nay, tôi nghiêng nhiều hơn về luồng GitHub, do tính đơn giản và dễ quản lý của nó. Ngoài ra, vì "thường xuyên triển khai sớm" ...

Hi vọng điêu nay co ich


+1. Tôi đồng ý với bạn.
VonC

2
Luồng GitHub nằm trong Git-Flow. Hãy nghĩ nếu bạn cần tích hợp liên tục và triển khai liên tục, bạn có thể đơn giản chạy càng nhiều càng tốt với nhánh phát triển. Mọi tính năng đều được phân nhánh từ nhánh phát triển. Bạn có thể không cần nhánh chính hoặc các nhánh phát hành trừ khi bạn có các mô hình triển khai phức tạp. (ví dụ: Phiên bản 1.1 của bạn đang hoạt động trên một số ứng dụng khách 1.2 của bạn đang hoạt động trên một ứng dụng khách khác và hiện tại bạn đang phát triển phiên bản 1.3 cho ứng dụng khách mới của mình) Cả 3 khách hàng sẽ yêu cầu sửa lỗi và thay đổi trên phiên bản tương ứng của họ.
Gayan Pathirage

Xin chào Diego và cảm ơn bạn đã trả lời. Điều gì về bảo trì nhiều phiên bản? Bạn có thực hiện dễ dàng với Git Flow không? Tôi nghe nói rằng rất khó vì bạn cần các chi nhánh hỗ trợ! Bạn có tin rằng mô hình này rất phù hợp để làm như vậy?
Luis Gouveia,

1
Xin chào Luis, tôi nghĩ bạn có thể làm cho mô hình hoạt động, nhưng một lần nữa, tôi cảm thấy rằng bạn có thể đạt được điều tương tự với quy trình làm việc git tiêu chuẩn.
Diego Antunes

1
@LuisGouveia thực ra, kể từ câu hỏi của bạn và câu trả lời của tôi ở trên, tôi đã biết một dự án mà git-flow sẽ hoạt động hoàn hảo và tôi có quyền sở hữu dự án. Ý tưởng là sử dụng git flow release...kết hợp với các hành động trên github để triển khai ứng dụng. Trong phản hồi ban đầu của tôi, tôi đã đề cập rằng chúng tôi đã phát hành nhiều lần trong một ngày, điều này gây ra sự cố khi sử dụng git-flow. Lý do tôi nghĩ git-flow sẽ hoạt động tốt trong dự án này là vì chúng tôi có một chu kỳ phát hành được xác định trước, đây là một trong những điểm bán hàng chính để sử dụng git-flow.
Diego Antunes
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.