Git: Quy trình công việc Gitflow
Quy trình công việc Gitflow là một thiết kế dòng công việc Git được xuất bản lần đầu tiên và được phổ biến bởi Vincent Driessen tại nvie. Quy trình công việc Gitflow định nghĩa một mô hình phân nhánh nghiêm ngặt được thiết kế xung quanh bản phát hành dự án. Điều này cung cấp một khuôn khổ mạnh mẽ để quản lý các dự án lớn hơn.
Gitflow phù hợp lý tưởng cho các dự án có chu kỳ phát hành theo lịch trình. Quy trình công việc này không thêm bất kỳ khái niệm hoặc lệnh mới nào ngoài những gì cần thiết cho Quy trình chi nhánh tính năng . Thay vào đó, nó gán các vai trò rất cụ thể cho các nhánh khác nhau và xác định cách thức và thời điểm chúng nên tương tác. Ngoài feature
các nhánh, nó sử dụng các nhánh riêng lẻ để chuẩn bị, duy trì và ghi lại các bản phát hành. Tất nhiên, bạn cũng có thể tận dụng tất cả các lợi ích của Quy trình làm việc của Chi nhánh tính năng: yêu cầu kéo, thử nghiệm tách biệt và cộng tác hiệu quả hơn.
Bắt đầu
Gitflow thực sự chỉ là một ý tưởng trừu tượng của quy trình công việc Git. Điều này có nghĩa là nó ra lệnh loại chi nhánh nào được thiết lập và làm thế nào để hợp nhất chúng lại với nhau. Chúng tôi sẽ chạm vào mục đích của các chi nhánh dưới đây. Bộ công cụ git-Flow là một công cụ dòng lệnh thực tế có quá trình cài đặt. Quá trình cài đặt cho git-Flow rất đơn giản. Các gói cho git-Flow có sẵn trên nhiều hệ điều hành. Trên các hệ thống OSX, bạn có thể thực thi brew install git-flow
. Trên windows bạn sẽ cần tải xuống và cài đặt git-Flow . Sau khi cài đặt git-Flow, bạn có thể sử dụng nó trong dự án của mình bằng cách thực thi git flow init
. Git-Flow là một trình bao bọc xung quanh Git. Các git flow init
lệnh là một phần mở rộng mặc định git init
lệnh và không thay đổi bất cứ điều gì trong kho của bạn khác hơn là tạo ra các chi nhánh cho bạn.
Làm thế nào nó hoạt động
Phát triển và làm chủ chi nhánh
Thay vì một master
nhánh duy nhất , quy trình công việc này sử dụng hai nhánh để ghi lại lịch sử của dự án. Các master
chi nhánh lưu trữ lịch sử phát hành chính thức, và các develop
chi nhánh phục vụ như là một chi nhánh tích hợp cho các tính năng. Thật tiện lợi khi gắn thẻ tất cả các cam kết trong master
chi nhánh với số phiên bản.
Bước đầu tiên là bổ sung mặc định master
với một develop
nhánh. Một cách đơn giản để làm điều này là cho một nhà phát triển tạo một develop
nhánh trống cục bộ và đẩy nó đến máy chủ:
git branch develop
git push -u origin develop
Chi nhánh này sẽ chứa toàn bộ lịch sử của dự án, trong khi đó master
sẽ chứa một phiên bản rút gọn. Các nhà phát triển khác hiện nên sao chép kho lưu trữ trung tâm và tạo một nhánh theo dõi chodevelop.
Khi sử dụng thư viện mở rộng luồng git, thực thi git flow init
trên một repo hiện có sẽ tạo ra develop
nhánh:
$ git flow init
Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
$ git branch
* develop
master
Chi nhánh tính năng
Mỗi tính năng mới sẽ nằm trong nhánh riêng của nó, có thể được đẩy đến kho lưu trữ trung tâm để sao lưu / cộng tác. Nhưng, thay vì phân nhánh master
, feature
các nhánh sử dụng develop
làm nhánh mẹ của chúng. Khi một tính năng hoàn thành, nó sẽ được hợp nhất trở lại để phát triển . Các tính năng không bao giờ nên tương tác trực tiếp với master
.
Lưu ý rằng feature
các nhánh kết hợp với develop
nhánh là, cho tất cả các ý định và mục đích, Dòng công việc Chi nhánh tính năng. Nhưng, Dòng công việc Gitflow không dừng ở đó.
Feature
các nhánh thường được tạo ra cho develop
nhánh mới nhất .
Tạo một nhánh tính năng
Không có phần mở rộng dòng git:
git checkout develop
git checkout -b feature_branch
Khi sử dụng phần mở rộng dòng git:
git flow feature start feature_branch
Tiếp tục công việc của bạn và sử dụng Git như bạn thường làm.
Hoàn thiện một nhánh tính năng
Khi bạn hoàn thành công việc phát triển trên tính năng, bước tiếp theo là hợp nhất feature_branch
vào develop
.
Không có phần mở rộng dòng git:
git checkout develop
git merge feature_branch
Sử dụng các phần mở rộng dòng git:
git flow feature finish feature_branch
Chi nhánh phát hành
Once develop
has acquired enough features for a release (or a predetermined release date is approaching), you fork a release
branch off of develop
. Creating this branch starts the next release cycle, so no new features can be added after this point—only bug fixes, documentation generation, and other release-oriented tasks should go in this branch. Once it's ready to ship, the release
branch gets merged into master
and tagged with a version number. In addition, it should be merged back into develop
, which may have progressed since the release was initiated.
Sử dụng một nhánh chuyên dụng để chuẩn bị các bản phát hành giúp một nhóm có thể đánh bóng bản phát hành hiện tại trong khi một nhóm khác tiếp tục làm việc với các tính năng cho bản phát hành tiếp theo. Nó cũng tạo ra các giai đoạn phát triển được xác định rõ ràng (ví dụ, thật dễ dàng để nói, Tuần này chúng tôi đang chuẩn bị cho phiên bản 4.0, và thực sự thấy nó trong cấu trúc của kho lưu trữ).
Làm release
chi nhánh là một hoạt động phân nhánh đơn giản. Giống như feature
các chi nhánh, release
các chi nhánh được dựa trên develop
chi nhánh. Một release
nhánh mới có thể được tạo bằng các phương pháp sau.
Không có phần mở rộng dòng git:
git checkout develop
git checkout -b release/0.1.0
Khi sử dụng các phần mở rộng dòng git:
$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'
Khi bản phát hành đã sẵn sàng để xuất xưởng, nó sẽ được hợp nhất vào đó master
và develop
sau đó release
chi nhánh sẽ bị xóa. Điều quan trọng là hợp nhất trở lại develop
vì các bản cập nhật quan trọng có thể đã được thêm vào release
chi nhánh và chúng cần được truy cập vào các tính năng mới. Nếu tổ chức của bạn nhấn mạnh việc xem xét mã, đây sẽ là một nơi lý tưởng cho yêu cầu kéo.
Để hoàn thành một release
nhánh, sử dụng các phương pháp sau:
Không có phần mở rộng dòng git:
git checkout develop
git merge release/0.1.0
Hoặc với phần mở rộng git-Flow:
git checkout master
git checkout merge release/0.1.0
git flow release finish '0.1.0'
Chi nhánh Hotfix
Bảo trì hoặc “hotfix”
các chi nhánh được sử dụng để nhanh chóng vá các bản phát hành sản xuất. Hotfix
các nhánh rất giống với release
các nhánh và feature
các nhánh ngoại trừ chúng dựa trên master
thay vì develop
. Đây là chi nhánh duy nhất nên rẽ nhánh trực tiếp master
. Ngay sau khi sửa chữa xong, nó sẽ được hợp nhất vào cả hai master
và develop
(hoặc release
chi nhánh hiện tại ) và master
nên được gắn thẻ với số phiên bản cập nhật.
Việc có một dòng phát triển chuyên dụng để sửa lỗi cho phép nhóm của bạn giải quyết các vấn đề mà không làm gián đoạn phần còn lại của quy trình làm việc hoặc chờ đợi chu kỳ phát hành tiếp theo. Bạn có thể nghĩ về các chi nhánh bảo trì như các release
chi nhánh ad hoc làm việc trực tiếp với master
. Một hotfix
nhánh có thể được tạo bằng các phương pháp sau:
Không có phần mở rộng dòng git:
git checkout master
git checkout -b hotfix_branch
Khi sử dụng các phần mở rộng dòng git:
$ git flow hotfix start hotfix_branch
Tương tự như hoàn thành một release
nhánh, một hotfix
nhánh được hợp nhất thành cả hai master
vàdevelop.
git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch
$ git flow hotfix finish hotfix_branch
Thí dụ
Một ví dụ hoàn chỉnh thể hiện Dòng nhánh tính năng như sau. Giả sử chúng ta có một thiết lập repo với một master
chi nhánh.
git checkout master
git checkout -b develop
git checkout -b feature_branch
# work happens on feature branch
git checkout develop
git merge feature_branch
git checkout master
git merge develop
git branch -d feature_branch
Ngoài feature
và release
dòng chảy, một hotfix
ví dụ như sau:
git checkout master
git checkout -b hotfix_branch
# work is done commits are added to the hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout master
git merge hotfix_branch
Tóm lược
Ở đây chúng tôi đã thảo luận về quy trình làm việc Gitflow. Gitflow là một trong nhiều phong cách làm việc của Git mà bạn và nhóm của bạn có thể sử dụng.
Một số điều quan trọng cần biết về Gitflow là:
- Quy trình công việc là tuyệt vời cho quy trình công việc phần mềm dựa trên phát hành.
- Gitflow cung cấp một kênh dành riêng cho các hotfix để sản xuất.
Lưu lượng chung của Gitflow là:
- Một
develop
nhánh được tạo từmaster
- Một
release
nhánh được tạo từdevelop
Feature
các nhánh được tạo ra từdevelop
- Khi a
feature
hoàn thành, nó được sáp nhập vàodevelop
nhánh - Khi
release
chi nhánh được thực hiện, nó được hợp nhất vàodevelop
vàmaster
- Nếu một vấn đề trong
master
được phát hiện, mộthotfix
nhánh được tạo từmaster
- Khi
hotfix
hoàn thành, nó được hợp nhất với cả haidevelop
vàmaster