Comparing Git Flow, Trunk Based and GitHub Flow

Việc quản lý mã nguồn là rất quan trọng để đảm bảo tính ổn định và hiệu quả của dự án. Hiện nay, có nhiều phương pháp quản lý mã nguồn khác nhau như: Github Flow, Git Flow và Trunk Based. Trong bài viết này, chúng ta sẽ đi vào chi tiết về các phương pháp quản lý mã nguồn này và tìm hiểu xem phương pháp nào phù hợp nhất cho feature team size từ 2 đến 7 người trong giai đoạn phát triển tính năng cho ứng dụng.

GitHub Flow-logo

1. Git Flow

Git Flow là một phương pháp quản lý phiên bản và quản lý mã nguồn được đưa ra bởi Vincent Driessen. Phương pháp này bao gồm hai nhánh chính là “develop” và “master”. Nhánh “develop” được sử dụng để phát triển tính năng mới và sửa lỗi, trong khi nhánh “master” được sử dụng để lưu trữ phiên bản ổn định. Trong Git Flow, mỗi tính năng mới được phát triển trên một nhánh riêng biệt, được tách ra từ nhánh “develop”. Sau khi tính năng được hoàn thành, nó sẽ được merge lại vào nhánh “develop”. Sau đó, nhánh “develop” sẽ được merge vào nhánh “master” để tạo ra một phiên bản mới và được triển khai.

Mặc dù Git Flow là một phương pháp quản lý phiên bản và quản lý mã nguồn phổ biến, nhưng nó có một số hạn chế đối với các dự án có tính chất phát triển nhanh, đòi hỏi sự linh hoạt và tốc độ cao. Với Git Flow, mỗi tính năng đều phải được tạo ra trên một nhánh mới, điều này có thể dẫn đến sự rối loạn và khó khăn trong việc quản lý các nhánh.

Ví dụ Git Flow

2. Trunk Based

Trunk Based là một phương pháp quản lý phiên bản và quản lý mã nguồn đơn giản, được sử dụng bởi các công ty có quy mô lớn và đòi hỏi tốc độ cao như Google và Facebook. Trong phương pháp này, tất cả các tính năng mới đều được phát triển trên một nhánh chính là “trunk”, và được đẩy lên server liên tục.

Trong Trunk Based, các tính năng mới không được tách ra thành các nhánh riêng biệt như Git Flow, mà được phát triển trên một nhánh chính duy nhất. Sau đó, tính năng mới được đẩy lên server ngay khi hoàn thành, và được triển khai ngay lập tức. Phương pháp này giúp giảm thiểu thời gian chờ đợi và giảm bớt sự rối loạn của các nhánh. Tuy nhiên, phương pháp Trunk Based có một số hạn chế đối với các dự án có quy mô lớn và nhiều tính năng phức tạp hoặc các dự án chưa ổn định, khi đó sự đồng bộ hóa và kiểm soát chất lượng của mã nguồn trở nên khó khăn.

Ví dụ Trunk Based

3. GitHub Flow

GitHub Flow là một phương pháp quản lý phiên bản và quản lý mã nguồn đơn giản và linh hoạt, được sử dụng bởi GitHub. Phương pháp này bao gồm ba giai đoạn: tạo nhánh, phát triển tính năng, và triển khai. Khi bắt đầu phát triển tính năng mới, người dùng sẽ tạo ra một nhánh mới từ nhánh chính, và đặt tên theo tính năng đó. Sau đó, họ sẽ phát triển tính năng mới trên nhánh đó. Khi hoàn thành, họ sẽ tạo ra một yêu cầu pull request (PR) để đề xuất tính năng mới được merge vào nhánh chính. Trước khi merge, tính năng mới sẽ được kiểm tra và đảm bảo tính ổn định. Sau khi merge thành công, tính năng mới sẽ được triển khai.

Phương pháp GitHub Flow có nhiều ưu điểm, đặc biệt là tính đơn giản và linh hoạt. Với phương pháp này, mỗi tính năng mới được phát triển trên một nhánh riêng biệt, tương tự như Git Flow, nhưng không có sự rắc rối của các nhánh. Ngoài ra, phương pháp này cũng giúp đảm bảo tính ổn định của mã nguồn trước khi merge, giúp giảm thiểu sự cố xảy ra sau khi triển khai. Tuy nhiên, phương pháp này có thể gây ra sự cố khi quá nhiều tính năng mới được phát triển trên nhánh chính cùng một lúc, và không có sự đồng bộ hóa đầy đủ giữa các tính năng đang phát triển.

Ví dụ GitHub Flow

4. Conclusion

GitHub Flow là phương pháp vừa đơn giản vừa linh hoạt và phù hợp cho các feature team size từ 2 đến 7 người trong giai đoạn phát triển tính năng cho ứng dụng. Điều này là do phương pháp này có tính chất tách biệt giữa các tính năng, và giúp đảm bảo tính ổn định của mã nguồn trước khi triển khai. Ngoài ra, phương pháp này giúp giảm thiểu sự cố xảy ra sau khi triển khai, đồng thời giảm thiểu sự rối loạn của các nhánh.

Điểm khác biệt chính giữa GitHub Flow và Git Flow là cách quản lý các nhánh. Trong GitHub Flow, mỗi tính năng được phát triển trên một nhánh riêng biệt và được merge vào nhánh chính sau khi đã được kiểm tra và đảm bảo tính ổn định. Trong khi đó, trong Git Flow, các tính năng được phát triển trên các nhánh feature riêng biệt, sau đó được merge vào nhánh develop để kiểm tra tính ổn định, và sau đó mới merge vào nhánh release và master để triển khai.

Trong trường hợp của Trunk Based, tất cả các tính năng được phát triển trên cùng một nhánh chính (trunk) và các thay đổi được commit trực tiếp vào nhánh chính. Tuy nhiên, đây không phải là phương pháp tốt nhất cho các dự án đang trong giai đoạn phát triển tính năng.

Lý do là Trunk Based là một phương pháp rất rủi ro, vì nó không cho phép kiểm soát chặt chẽ các thay đổi trước khi triển khai. Nếu một lỗi xuất hiện trên nhánh chính, nó có thể gây ảnh hưởng đến tất cả các tính năng khác đang được phát triển trên nhánh đó. Điều này có thể dẫn đến các vấn đề về tính ổn định và khả năng triển khai của ứng dụng. Ngoài ra, khi có nhiều tính năng đang được phát triển trên cùng một nhánh, sẽ khó khăn hơn để quản lý và theo dõi các thay đổi và sẽ tạo ra nhiều xung đột khi merge các tính năng khác nhau.

Vì vậy, GitHub Flow được coi là phương pháp phù hợp nhất cho các feature team size từ 2 đến 7 người trong giai đoạn phát triển tính năng cho ứng dụng. Với GitHub Flow, các tính năng được phát triển trên các nhánh riêng biệt và được merge vào nhánh chính sau khi đã được kiểm tra và đảm bảo tính ổn định. Điều này giúp đảm bảo rằng các thay đổi không ảnh hưởng đến các tính năng khác và giúp giảm thiểu các xung đột khi merge.

Tóm lại, trong quá trình phát triển tính năng cho ứng dụng, có nhiều phương pháp quản lý mã nguồn khác nhau như Git Flow, Trunk Based và GitHub Flow. Mỗi phương pháp có những ưu điểm và nhược điểm riêng và phù hợp với các kích thước và giai đoạn của dự án khác nhau. Trong trường hợp của các feature team size từ 2 đến 7 người trong giai đoạn phát triển tính năng cho ứng dụng, GitHub Flow được coi là phương pháp phù hợp nhất với tính chất tách biệt giữa các tính năng và giúp đảm bảo tính ổn định của mã nguồn trước khi triển khai.

Reference articles

Cảm ơn các bạn đã đọc tới đây.

updatedupdated2023-05-022023-05-02
Load Comments?