Courses
Tôi bắt đầu học Git từ sớm khi còn ở đại học, nhưng khi đó quy trình làm việc của tôi khá cơ bản—mọi thứ đều diễn ra trên nhánh master. Chỉ khi bắt đầu làm việc nhóm, chúng tôi mới tạo các nhánh riêng, nhưng những nhánh đó tồn tại quá lâu, khiến việc hợp nhất trở nên đau đầu và rối rắm.
Mọi thứ thay đổi khi tôi có công việc toàn thời gian đầu tiên. Tôi bắt gặp sơ đồ GitFlow trông có vẻ phức tạp. Nhưng bất ngờ thay, nó khiến mọi thứ trở nên dễ dàng. Nó mang lại trật tự cho hỗn loạn, với hướng dẫn rõ ràng về cách làm việc với tính năng, quản lý phát hành, và xử lý bugfix và hotfix.
Trong hướng dẫn này, tôi sẽ giải thích cách GitFlow hoạt động, cách thiết lập tiện ích mở rộng GitFlow mạnh mẽ, và cách sử dụng nó trong phát triển hằng ngày. Dù bạn làm việc nhóm hay quản lý một dự án cá nhân với nhiều nhà phát triển, GitFlow có thể tăng năng suất và tạo ra khác biệt lớn!
GitFlow là gì?
GitFlow là một mô hình tách nhánh Git phổ biến, cung cấp cách tiếp cận có cấu trúc để quản lý mã nguồn, đặc biệt trong môi trường cộng tác. Được giới thiệu bởi Vincent Driessen trong bài blog năm 2010, GitFlow được áp dụng rộng rãi vì nó định nghĩa rõ ràng cách và thời điểm tạo nhánh cho tính năng, phát hành và hotfix.
GitFlow phát huy khả năng tách nhánh và hợp nhất của Git bằng cách đưa ra quy ước đặt tên nhất quán và quy trình làm việc minh bạch.

Sơ đồ GitFlow. Hình minh họa của tác giả, lấy cảm hứng từ Vincent Driessen.
Thay vì commit mọi thứ vào main hoặc master, GitFlow giới thiệu các nhánh chuyên dụng với mục đích cụ thể, chẳng hạn:
develop: Nhánh tích hợp cho các tính năng mới. Đây là nơi diễn ra toàn bộ phát triển trước khi sẵn sàng đưa lên sản xuất.feature/*: Dùng để phát triển từng tính năng riêng lẻ. Các nhánh này tách ra từdevelopvà hợp nhất trở lại vào đó.release/*: Hỗ trợ hoàn thiện một phiên bản sản xuất mới. Nhánh này cho phép bạn chuẩn bị phát hành mà không cần đóng băng nhánhdevelop.hotfix/*: Dành cho các bản vá khẩn cấp cho mã trên môi trường sản xuất. Những nhánh này được tạo từmastervà được hợp nhất vào cảmasterlẫndevelop.master(hoặc hiện chủ yếu làmain): Nhánh chứa mã ổn định, sẵn sàng cho sản xuất.
Luồng này giúp giữ sạch mã nguồn và quy trình phát hành có thể dự đoán được.
Để tìm hiểu thêm về Git, tôi khuyên bạn nên xem Foundations of Git hoặc Intermediate Git.
GitFlow mang lại các lợi ích chính sau:
- Cộng tác tốt hơn: Mọi người đều biết nơi commit thay đổi và nơi tách nhánh.
- Phát triển song song: Các nhóm có thể làm việc đồng thời trên nhiều tính năng, bản phát hành hoặc bản vá mà không xung đột.
- Sẵn sàng phát hành: Bạn luôn có bức tranh rõ ràng về những gì đã sẵn sàng đưa lên sản xuất.
- Hiệu quả hotfix: Có thể sửa lỗi khẩn cấp trên sản xuất và phát hành nhanh mà không làm gián đoạn quá trình phát triển đang diễn ra.
Thiết lập GitFlow
Trước khi tận dụng mô hình tách nhánh có cấu trúc của GitFlow, bạn phải cài đặt nó trên máy và khởi tạo trong kho mã của mình. May mắn là cả hai bước đều đơn giản.
Để dùng GitFlow, bạn cần cài sẵn Git trên máy. Bạn có thể đọc thêm về cài đặt Git trong Hướng dẫn Cài đặt Git.
Cài đặt GitFlow
GitFlow là tiện ích mở rộng của Git, nên bạn cần cài đặt riêng. Mặc định nó không đi kèm Git. Quá trình cài đặt phụ thuộc vào hệ điều hành của bạn.
Để có hướng dẫn chi tiết hơn về cách cài đặt GitFlow, hãy đọc tài liệu chính thức.
Lưu ý: Mặc dù tiện ích GitFlow ở trên giúp quản lý các nhánh tính năng, phát hành và hotfix dễ dàng hơn với các lệnh đơn giản, nó không bắt buộc. Bạn có thể tuân theo quy trình GitFlow bằng các lệnh Git tiêu chuẩn—miễn là bạn nhất quán với quy ước đặt tên và cách hợp nhất. Công cụ này chỉ tự động hóa và chuẩn hóa quy trình, hữu ích cho nhóm hoặc dự án lớn.
macOS
Nếu bạn dùng Homebrew, trình quản lý gói phổ biến nhất cho macOS, hãy chạy:
brew install git-flow-avh
Linux (Debian/Ubuntu)
Nếu bạn dùng hệ Debian như Ubuntu, hãy dùng:
sudo apt-get install git-flow
Windows
Nếu bạn dùng Windows, bạn có thể cài GitFlow qua Git for Windows và thêm Git Bash vào terminal của bạn.
Để kiểm tra GitFlow đã được cài chưa, bạn có thể chạy:
git flow version
Khởi tạo GitFlow trong kho mã
Bước đầu tiên, bạn cần có một kho Git đã được khởi tạo trước khi dùng GitFlow. Bạn có thể đọc thêm tại Cách khởi tạo và thiết lập kho Git.
Khi GitFlow đã được cài, bạn có thể khởi tạo nó trong bất kỳ kho Git hiện có nào với:
git flow init
GitFlow sẽ nhắc bạn cấu hình một số thiết lập. Dưới đây là giải thích ý nghĩa và cách lựa chọn phù hợp:
- Tên nhánh: Bạn sẽ được hỏi về tên các nhánh mặc định.
- Tên nhánh sản xuất (mặc định:
master) - Tên nhánh phát triển (mặc định
develop) - Tiền tố cho các nhánh hỗ trợ: GitFlow dùng quy ước đặt tên cho các loại nhánh khác nhau.
- Nhánh tính năng:
feature/ - Nhánh bugfix:
bugfix/ - Nhánh phát hành:
release/ - Nhánh hotfix:
hotfix/ - Nhánh hỗ trợ:
support/(hiếm khi dùng trong thực tế) - Tiền tố thẻ phiên bản:
v(ví dụv.1.2.0)
Các giá trị mặc định hoạt động tốt cho hầu hết nhóm, nhưng bạn có thể tùy chỉnh để khớp tiêu chuẩn đặt tên của tổ chức.
Ví dụ đầu ra khi khởi tạo:
git flow init
Which branch should be used for bringing forth production releases?
- master
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Bugfix branches? [bugfix/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? [] v
Sau khi khởi tạo, bạn có thể đẩy nhánh develop lên kho từ xa. Bạn có thể đọc thêm về cách push và pull nhánh tại Hướng dẫn Git Push và Pull.
Sử dụng GitFlow cho Phát triển
Khi GitFlow đã được khởi tạo trong kho mã, bạn có thể bắt đầu sử dụng mô hình tách nhánh của nó để quản lý quy trình phát triển. GitFlow cung cấp các lệnh cấp cao để làm việc với tính năng, phát hành và hotfix, giúp duy trì cấu trúc và tránh “mớ hỗn độn” của Git.
Trong các phần tiếp theo, chúng ta sẽ khám phá GitFlow trong thực tế.
Tạo nhánh tính năng
Nhánh tính năng được dùng để phát triển chức năng mới mà không ảnh hưởng đến mã nguồn chính.
Bạn có thể tạo nhánh tính năng bằng cách chạy:
git flow feature start <feature-name>
Lệnh này tạo một nhánh mới từ develop có tên feature/<feature-name>. Bạn có thể bắt đầu phát triển tính năng và commit thay đổi như thường lệ.
Hoàn tất nhánh tính năng
Khi tính năng đã hoàn thiện và được kiểm thử, bạn có thể kết thúc bằng:
git flow feature finish <feature-name>
Lệnh này sẽ:
- Hợp nhất nhánh tính năng vào nhánh
develop. - Xóa nhánh cục bộ
feature/<feature-name>.
Nếu gặp xung đột hợp nhất, hãy tự xử lý và hoàn tất hợp nhất bằng quy trình giải quyết xung đột tiêu chuẩn của Git.
Nếu bạn làm việc trong các nhóm lớn, nơi cần tạo và xem xét pull request trước, bạn không thể dùng trực tiếp lệnh kết thúc của GitFlow, mà thay vào đó, bạn có thể làm như sau:
- Commit công việc của bạn, rồi đẩy nhánh lên:
git push origin feature/<feature-name>
- Tạo pull request từ
feature/<feature-name>vàodeveloptrên GitHub, GitLab, v.v. - Yêu cầu review, chạy kiểm thử và nhận phê duyệt.
- Khi được duyệt, hợp nhất qua giao diện nền tảng và xóa nhánh.
Nếu bạn muốn tìm hiểu thêm về GitHub và cách sử dụng, tôi khuyên dùng các khóa học GitHub Foundations và GitHub Concepts. Ở các nhóm khác, bạn có thể theo luồng chuẩn git flow feature finish, nhưng cần yêu cầu review nhánh trước khi hợp nhất trở lại develop và chạy kiểm thử thay đổi mã để đảm bảo hành vi đúng.
Tạo nhánh phát hành
Nhánh phát hành được tạo để chuẩn bị phiên bản sản xuất mới mà không chặn quá trình phát triển đang diễn ra trên nhánh develop.
Để bắt đầu phát hành, chạy:
git flow release start <version-number>
Lệnh này tạo một nhánh mới tên release/<version-number>. Nhánh này tách ra từ develop.
Trong nhánh này, bạn thường hoàn thiện số phiên bản, sửa lỗi nhỏ, cập nhật tài liệu và changelog.
Hoàn tất nhánh phát hành
Khi bản phát hành sẵn sàng cho sản xuất, hoàn tất bằng:
git flow release finish <version-number>
Lệnh này sẽ:
- Hợp nhất nhánh phát hành vào cả
mastervàdevelop. - Gắn thẻ phát hành trên
master(ví dụ,v1.0.0). - Xóa nhánh cục bộ
release/<release-number>.
Đừng quên đẩy thay đổi và thẻ:
git push origin master
git push origin develop
git push --tags
# hoặc ngắn gọn
git push origin master develop --tags
Tạo nhánh hotfix
Hotfix được dùng cho các bản vá khẩn cấp khi phát hiện lỗi trên nhánh master.
Để bắt đầu hotfix:
git flow hotfix start <version-number>
Lệnh này tạo nhánh hotfix/<version-number> từ master. Bạn có thể áp dụng thay đổi và commit bản vá.
Khi xong, kết thúc bằng:
git flow hotfix finish <version-number>
Thao tác này sẽ:
- Hợp nhất hotfix vào
mastervàdevelop. - Gắn thẻ bản vá trên
master. - Xóa nhánh cục bộ `hotfix/<version-number>.
Đẩy các thay đổi cục bộ và thẻ như thường lệ:
git push origin master develop --tags
Hotfix đặc biệt hữu ích vì cho phép bạn nhanh chóng sửa lỗi trên sản xuất mà không ảnh hưởng đến phát triển đang diễn ra trên nhánh develop.
Hãy tưởng tượng một số tính năng mới đã được hợp nhất vào develop mà bạn chưa muốn phát hành, nhưng ứng dụng sản xuất lại có lỗi nghiêm trọng cần sửa ngay.
Đây là lúc hotfix phát huy tác dụng, vì chúng được tách từ master và chỉ hợp nhất trở lại vào develop.
Ví dụ Tách nhánh với GitFlow
Hãy cùng đi qua hai quy trình phổ biến, một vòng phát triển tính năng và một lần phát hành kèm hotfix, để thấy GitFlow hoạt động thế nào và so sánh với các lệnh Git truyền thống.
Bằng cách nhìn cả hai mặt, bạn sẽ hiểu rõ hơn cách tiện ích GitFlow đơn giản hóa quy trình bằng cách gói nhiều bước Git thành các lệnh chuẩn, đơn giản.
Nếu bạn cần xem nhanh các lệnh Git truyền thống, tôi khuyên dùng Git Cheat Sheet Hoàn chỉnh. Nếu bạn muốn có cái nhìn tổng quan nhanh về Git, hãy đọc Hướng dẫn GitHub và Git cho người mới bắt đầu.
Quy trình phát triển tính năng
Giả sử bạn đang triển khai tính năng mới cho phép người dùng xác thực vào ứng dụng của bạn. Bạn đặt tên tính năng là user-authentication.
Sử dụng GitFlow:
git flow feature start user-authentication
# Phát triển tính năng
git add .
git commit -m "feat: Implement basic user authentication"
# Khi hoàn tất:
git flow feature finish user-authentication
git push origin develop
Còn nếu dùng Git thông thường:
# Tạo và chuyển sang nhánh mới thủ công
git checkout -b feature/user-authentication develop
# Phát triển tính năng
git add .
git commit -m "Implement basic user authentication"
# Khi hoàn tất
git checkout develop
git merge feature/user-authentication
git branch -d feature/user-authentication
git push origin develop
Như bạn thấy, GitFlow giảm số lượng lệnh và nhờ đó giảm độ phức tạp. Nó cũng ít dễ mắc lỗi hơn, như vô tình hợp nhất vào nhánh không đúng.
Để tìm hiểu thêm cách hợp nhất trong Git hoạt động, hãy đọc Hướng dẫn Git Merge: Toàn tập kèm ví dụ.
Giờ hãy giả sử bạn đang chuẩn bị phát hành 1.0.0. Nhưng ngay sau khi phát hành, phát hiện một lỗi nghiêm trọng cần được sửa bằng hotfix.
Sử dụng GitFlow:
# Bắt đầu phát hành
git flow release start 1.0.0
# Tinh chỉnh cuối, cập nhật số phiên bản
git commit -am "Prepare release v1.0.0"
# Hoàn tất phát hành
git flow release finish 1.0.0
git push origin master develop --tags
Giờ bạn đã phát hiện lỗi và cần tạo hotfix:
# Bắt đầu hotfix
git flow hotfix start 1.0.1
# Áp dụng bản vá
git commit -am "Fix login issue in production"
# Hoàn tất hotfix
git flow hotfix finish 1.0.1
git push origin master develop --tags
Và làm tất cả điều này với các lệnh Git thông thường:
# Phát hành thủ công
git checkout -b release/1.0.0 develop
# Thực hiện thay đổi
git commit -am "Prepare release v1.0.0"
# Hợp nhất thủ công
git checkout master
git merge release/1.0.0
git tag -a v1.0.0 -m "Release v1.0.0"
git checkout develop
git merge release/1.0.0
# Xóa nhánh phát hành
git branch -d release/1.0.0
git push origin master develop --tags
# Hotfix thủ công
git checkout -b hotfix/1.0.1 master
# Áp dụng bản vá
git commit -am "Fix login issue in production"
git checkout master
git merge hotfix/1.0.1
git tag -a v1.0.1 -m "Hotfix v1.0.1"
git checkout develop
git merge hotfix/1.0.1
# Xóa nhánh hotfix
git branch -d hotfix/1.0.1
git push origin master develop --tags
Thực tiễn tốt nhất khi dùng GitFlow
GitFlow khá mạnh mẽ và giúp bạn quản lý mã của nhóm. Tuy nhiên, để tận dụng tối đa cấu trúc này, bạn nên tuân theo một số thực tiễn tốt.
Những thực tiễn này giúp duy trì các nhánh gọn gàng, giảm xung đột hợp nhất và cải thiện năng suất, đặc biệt trong môi trường cộng tác.
Đặt tên nhánh nhất quán
Tính nhất quán là chìa khóa khi cộng tác. Hãy bám theo quy ước đặt tên mặc định của GitFlow trừ khi nhóm bạn có lý do chính đáng để tùy biến.
Mẫu đặt tên khuyến nghị:
- Nhánh tính năng:
feature/<feature-name> - Nhánh phát hành:
release/<version-number> - Nhánh hotfix:
hotfix/<version-number>
Bạn cũng nên dùng kebab-case cho tên nhiều từ (ví dụ, feature/user-authentication).
Thay đổi nhỏ, thường xuyên
Những nhánh sống lâu thường dẫn đến các lần hợp nhất đau đớn và pull request khổng lồ khó review.
Tôi biết rõ điều này, vì tôi đã vài lần trải qua “địa ngục xung đột hợp nhất”, và bạn nên tránh nếu có thể!
Thay vào đó, hãy giữ nhánh tính năng sống ngắn và tập trung vào một nhiệm vụ. Commit và đẩy thường xuyên để tránh mất việc hoặc lệch quá xa so với develop.
Các thay đổi nhỏ, tuần tự sẽ dễ kiểm thử, review và tích hợp hơn.
Đồng bộ thường xuyên với develop
Khi làm việc trên nhánh tính năng, bạn không được để tụt hậu. Hãy thường xuyên kéo những thay đổi mới nhất từ nhánh develop để giảm thiểu xung đột khi hợp nhất sau này:
git checkout feature/<your-feature>
git fetch origin
git rebase origin/develop
Giữ đồng bộ giúp tích hợp mượt hơn và giữ cho thay đổi của bạn tương thích với những gì người khác đang xây dựng.
Review và kiểm thử trước khi hợp nhất
Dù GitFlow hỗ trợ hợp nhất trực tiếp với các lệnh như git flow feature finish, tốt nhất là dùng pull request (PR) hoặc merge request (MR) cho mọi lần hợp nhất vào develop và master.
Lợi ích:
- Kích hoạt quy trình review mã và phê duyệt
- Kích hoạt kiểm tra CI/CD tự động
- Cung cấp dấu vết kiểm toán rõ ràng cho thay đổi
Điều này đặc biệt quan trọng trong môi trường sản xuất, nơi kiểm soát chất lượng là cốt yếu.
Khắc phục sự cố với GitFlow
Ngay cả với quy trình có cấu trúc như GitFlow, vấn đề vẫn có thể phát sinh, đặc biệt khi làm việc nhóm hoặc trên các nhánh kéo dài.
Phần này sẽ đề cập các thách thức thường gặp và cách giải quyết hiệu quả.
Xung đột hợp nhất
Xung đột hợp nhất là chuyện thường gặp khi làm việc trên cùng một mã nguồn với đội lớn và thật phiền toái.Chúng thường xảy ra khi hai nhánh cùng sửa các dòng mã giống nhau.
Các bước xử lý xung đột hợp nhất:
- Dừng quá trình
git flow finish. - Hợp nhất thủ công nhánh vào đích của nó:
git checkout develop
git merge feature/<your-feature>
- Git sẽ nhắc bạn giải quyết xung đột. Mở các tệp bị xung đột và tìm các đánh dấu xung đột như sau:
<<<<<<< HEAD
Code from develop
=======
Code from feature branch
>>>>>>> feature/my-feature
- Chỉnh sửa và dọn dẹp mã thủ công.
- Khi đã xử lý xong, đánh dấu các tệp là đã giải quyết:
git add <resolved-file>
- Sau đó hoàn tất hợp nhất với:
git commit -m “resolve merge conflict …”
Dọn dẹp các nhánh cũ
Đôi khi kho của bạn có các nhánh feature, release hoặc hotfix đã lỗi thời. Để tránh nhầm lẫn, hãy giữ kho gọn gàng nhất có thể.
Bạn có thể xử lý bằng các bước sau:
- Liệt kê tất cả nhánh cục bộ:
git branch
- Xóa một nhánh cục bộ:
git branch -d <branch-name>
- Nếu nhánh chưa được hợp nhất và bạn chắc chắn có thể xóa:
git branch -D <branch-name>
- Xóa một nhánh từ xa:
git push origin --delete <branch-name>
Điều quan trọng là thường xuyên kiểm tra và dọn các nhánh cũ để giữ kho gọn gàng nhất có thể.
Kết luận
GitFlow là một khung mạnh mẽ cho cộng tác, rõ ràng và kiểm soát trong quy trình phát triển của bạn. Dù làm một dự án cá nhân với nhiều người tham gia hay đóng góp cho một nhóm lớn, GitFlow giúp bạn có tổ chức bằng cách tách bạch rõ ràng phát triển tính năng, phát hành và hotfix.
Khi tôi bắt đầu dùng GitFlow, nó thực sự là bước ngoặt. Không còn hỗn loạn khi hợp nhất. Không còn đoán xem nên dùng nhánh nào. Mỗi phần việc đều có chỗ của nó, và mỗi lần phát hành đều theo một quy trình lặp lại, đáng tin cậy. Theo thời gian, tôi đã giới thiệu GitFlow cho mọi nhóm tôi từng làm việc. Và mỗi lần như vậy, nó mang lại nhiều cấu trúc hơn, cộng tác trôi chảy hơn, và ít sai sót hơn.
Trong hướng dẫn này, bạn đã học:
- GitFlow là gì và vì sao nó hữu ích
- Cách cài đặt và khởi tạo GitFlow
- Cách làm việc với tính năng, phát hành và hotfix
- Thực tiễn tốt nhất để tránh vấn đề thường gặp
- Cách điều chỉnh GitFlow cho quy trình hiện đại bằng pull request
Nếu bạn sẵn sàng nâng cấp quy trình Git, hãy thử dùng GitFlow trong dự án tiếp theo. Và nếu bạn đã quen với những điều cơ bản, hãy cân nhắc tích hợp nó vào pipeline CI/CD của nhóm, quy trình review, hoặc thậm chí GitHub Actions.
Câu hỏi thường gặp
GitFlow còn phù hợp trong các quy trình phát triển hiện đại không?
Có, GitFlow vẫn hữu ích, đặc biệt với các nhóm hướng đến phát hành. Tuy nhiên, một số nhóm ưa chuộng các mô hình đơn giản hơn như trunk-based development hoặc GitHub Flow để lặp nhanh hơn.
Tôi có thể dùng GitFlow với GitHub, GitLab hoặc Bitbucket không?
Chắc chắn rồi. GitFlow hoạt động trơn tru với mọi nền tảng dựa trên Git. Bạn có thể dùng GitFlow CLI cục bộ và tích hợp với pull request, CI/CD và quy trình review trên các nền tảng đó.
Những lựa chọn thay thế GitFlow là gì?
Các lựa chọn thay thế gồm GitHub Flow (lý tưởng cho phân phối liên tục), GitLab Flow (kết hợp luồng theo tính năng và theo môi trường), và trunk-based development cho tốc độ triển khai nhanh.
GitFlow có hoạt động với pipeline CI/CD không?
Có. GitFlow kết hợp tốt với CI/CD. Bạn có thể tự động hóa build và triển khai từ các nhánh develop, release hoặc master tùy thiết lập của bạn.
Nếu tôi không muốn dùng công cụ GitFlow CLI thì sao?
Không sao—bạn có thể tuân theo các nguyên tắc của GitFlow thủ công bằng các lệnh Git tiêu chuẩn. CLI chỉ giúp chuẩn hóa quy ước đặt tên và hợp nhất.
Một nhánh tính năng trong GitFlow nên tồn tại bao lâu?
Lý tưởng là nhánh tính năng nên sống ngắn—chỉ vài ngày. Điều này giảm rủi ro xung đột hợp nhất và giúp thay đổi dễ kiểm thử, review.
Tôi có thể tùy chỉnh tên nhánh và tiền tố trong GitFlow không?
Có. Trong quá trình khởi tạo, GitFlow cho phép bạn chọn tên và tiền tố riêng để phù hợp với quy ước đặt tên hoặc chiến lược triển khai của nhóm.
GitFlow xử lý bugfix khác hotfix như thế nào?
Nhánh bugfix (không bắt buộc) được dùng trong quá trình phát triển và tách từ develop. Còn hotfix là các bản vá khẩn cấp cho sản xuất và tách từ master.
Tôi có nên luôn dùng pull request với GitFlow không?
Dù không bắt buộc, sử dụng pull request bổ sung một lớp review, kiểm thử và khả năng truy vết—rất được khuyến nghị, đặc biệt trong môi trường làm việc nhóm.
Tôi là Kỹ sư Cloud với nền tảng vững chắc về Kỹ thuật Điện, học máy và lập trình. Sự nghiệp của tôi bắt đầu từ lĩnh vực thị giác máy tính, tập trung vào phân loại ảnh, trước khi chuyển sang MLOps và DataOps. Tôi chuyên xây dựng nền tảng MLOps, hỗ trợ các nhà khoa học dữ liệu và triển khai các giải pháp dựa trên Kubernetes để tinh gọn quy trình làm việc của học máy.
