Git: Quy trình công việc rẽ nhánh tính năng


Đăng ký nhận thông báo về những video mới nhất

Ý tưởng cốt lõi đằng sau Quy trình làm việc của Chi nhánh tính năng là tất cả sự phát triển tính năng nên diễn ra trong một nhánh dành riêng thay vì nhánh master. Việc đóng gói này giúp nhiều nhà phát triển dễ dàng làm việc trên một tính năng cụ thể mà không làm ảnh hưởng đến cơ sở mã chính. Nó cũng có nghĩa là nhánh master sẽ không bao giờ chứa mã bị hỏng, đó là một lợi thế rất lớn cho môi trường tích hợp liên tục.

Đóng gói phát triển tính năng cũng cho phép tận dụng các yêu cầu kéo, đây là một cách để bắt đầu các cuộc thảo luận xung quanh một chi nhánh. Họ cho các nhà phát triển khác cơ hội đăng nhập vào một tính năng trước khi nó được tích hợp vào dự án chính thức. Hoặc, nếu bạn bị kẹt ở giữa một tính năng, bạn có thể mở yêu cầu kéo yêu cầu đề xuất từ ​​đồng nghiệp của mình. Vấn đề là, các yêu cầu kéo giúp nhóm của bạn dễ dàng nhận xét về công việc của nhau.

Luồng công việc Chi nhánh Git là một quy trình công việc có thể kết hợp có thể được tận dụng bởi các quy trình công việc Git cấp cao khác. Chúng tôi đã thảo luận về các quy trình công việc Git khác trên trang tổng quan về quy trình công việc Git . Git Feature Branch Workflow là mô hình phân nhánh tập trung, có nghĩa là nó là một khung hướng dẫn để quản lý và tạo các nhánh. Quy trình công việc khác được tập trung nhiều hơn repo. Luồng công việc của Chi nhánh tính năng Git có thể được tích hợp vào các quy trình công việc khác. Theo truyền thống, các luồng công việc Gitflow và Git Forking thường sử dụng luồng công việc Chi nhánh Git liên quan đến các mô hình phân nhánh của chúng.

Làm thế nào nó hoạt động


Luồng công việc nhánh tính năng giả định một kho lưu trữ trung tâm và masterđại diện cho lịch sử dự án chính thức. Thay vì cam kết trực tiếp trên masterchi nhánh địa phương của họ , các nhà phát triển tạo một chi nhánh mới mỗi khi họ bắt đầu làm việc trên một tính năng mới. Các nhánh tính năng nên có tên mô tả, như các mục hoạt hình-menu hoặc vấn đề- # 1061. Ý tưởng là đưa ra một mục đích rõ ràng, tập trung cao độ cho mỗi chi nhánh. Git không phân biệt kỹ thuật giữa masternhánh và nhánh tính năng, vì vậy các nhà phát triển có thể chỉnh sửa, tạo giai đoạn và cam kết thay đổi đối với nhánh tính năng.
 

Ngoài ra, các nhánh tính năng có thể (và nên) được đẩy đến kho lưu trữ trung tâm. Điều này cho phép chia sẻ một tính năng với các nhà phát triển khác mà không cần chạm vào bất kỳ mã chính thức nào. Vì masterlà chi nhánh đặc biệt của người Viking, việc lưu trữ một số nhánh tính năng trên kho lưu trữ trung tâm không gây ra bất kỳ vấn đề nào. Tất nhiên, đây cũng là một cách thuận tiện để sao lưu các cam kết địa phương của mọi người. Sau đây là hướng dẫn về vòng đời của một nhánh tính năng.

Bắt đầu với nhánh chính

Tất cả các nhánh tính năng được tạo ra từ trạng thái mã mới nhất của dự án. Hướng dẫn này giả định điều này được duy trì và cập nhật trong masterchi nhánh.

git checkout master
git fetch origin
git reset --hard origin/master

Điều này chuyển repo sang masterchi nhánh, lấy các cam kết mới nhất và đặt lại bản sao cục bộ của repo masterđể phù hợp với phiên bản mới nhất.

Tạo một chi nhánh mới

Sử dụng một nhánh riêng cho từng tính năng hoặc vấn đề bạn làm việc. Sau khi tạo một nhánh, hãy kiểm tra nó tại địa phương để mọi thay đổi bạn thực hiện sẽ nằm trên nhánh đó.

git checkout -b new-feature

Điều này kiểm tra một nhánh được gọi là tính năng mới dựa trên mastervà cờ -b bảo Git tạo nhánh nếu nó không tồn tại.

Cập nhật, thêm, cam kết và đẩy các thay đổi

Trên nhánh này, chỉnh sửa, giai đoạn và cam kết thay đổi theo cách thông thường, xây dựng tính năng với càng nhiều cam kết cần thiết. Làm việc trên tính năng và thực hiện các cam kết như bất cứ khi nào bạn sử dụng Git. Khi sẵn sàng, hãy đẩy các cam kết của bạn, cập nhật nhánh tính năng trên Bitbucket.

git status
git add <some-file>
git commit

Đẩy nhánh tính năng vào điều khiển từ xa

Đó là một ý tưởng tốt để đẩy nhánh tính năng lên kho lưu trữ trung tâm. Điều này phục vụ như một bản sao lưu thuận tiện, khi cộng tác với các nhà phát triển khác, điều này sẽ cung cấp cho họ quyền truy cập để xem các cam kết với chi nhánh mới.

git push -u origin new-feature

Lệnh này đẩy tính năng mới vào kho lưu trữ trung tâm (gốc) và cờ -u thêm nó dưới dạng nhánh theo dõi từ xa. Sau khi thiết lập nhánh theo dõi, git pushcó thể được gọi mà không có bất kỳ tham số nào để tự động đẩy nhánh tính năng mới vào kho lưu trữ trung tâm. Để nhận phản hồi về nhánh tính năng mới, hãy tạo một yêu cầu kéo trong giải pháp quản lý kho lưu trữ như  Bitbucket Cloud  hoặc  Bitbucket Server . Từ đó, bạn có thể thêm người đánh giá và đảm bảo mọi thứ đều tốt trước khi hợp nhất.

Giải quyết phản hồi

Bây giờ đồng đội bình luận và phê duyệt các cam kết đẩy. Giải quyết các bình luận của họ cục bộ, cam kết và đẩy các thay đổi được đề xuất lên Bitbucket. Cập nhật của bạn xuất hiện trong yêu cầu kéo.

Hợp nhất yêu cầu kéo của bạn

Trước khi hợp nhất, bạn có thể phải giải quyết xung đột hợp nhất nếu những người khác đã thay đổi repo. Khi yêu cầu kéo của bạn được chấp thuận và không xung đột, bạn có thể thêm mã của mình vào masterchi nhánh. Hợp nhất từ ​​yêu cầu kéo trong Bitbucket.

Yêu cầu kéo

Ngoài việc cô lập phát triển tính năng, các chi nhánh còn có thể thảo luận về các thay đổi thông qua các yêu cầu kéo. Khi ai đó hoàn thành một tính năng, họ không ngay lập tức hợp nhất nó vào master. Thay vào đó, họ đẩy nhánh tính năng đến máy chủ trung tâm và gửi yêu cầu kéo yêu cầu hợp nhất các bổ sung của họ vào master. Điều này cung cấp cho các nhà phát triển khác một cơ hội để xem xét các thay đổi trước khi chúng trở thành một phần của cơ sở mã chính.

Đánh giá mã là một lợi ích chính của các yêu cầu kéo, nhưng chúng thực sự được thiết kế để trở thành một cách chung để nói về mã. Bạn có thể nghĩ về các yêu cầu kéo như một cuộc thảo luận dành riêng cho một chi nhánh cụ thể. Điều này có nghĩa là chúng cũng có thể được sử dụng sớm hơn nhiều trong quá trình phát triển. Ví dụ: nếu nhà phát triển cần trợ giúp với một tính năng cụ thể, tất cả những gì họ phải làm là gửi yêu cầu kéo. Các bên quan tâm sẽ được thông báo tự động và họ sẽ có thể thấy câu hỏi ngay bên cạnh các cam kết liên quan.

Khi một yêu cầu kéo được chấp nhận, hành động thực tế của việc xuất bản một tính năng cũng giống như trong Quy trình làm việc tập trung . Trước tiên, bạn cần đảm bảo rằng địa phương của bạn masterđược đồng bộ hóa với thượng nguồn master. Sau đó, bạn hợp nhất nhánh tính năng vào mastervà đẩy cập nhật mastertrở lại kho lưu trữ trung tâm.

Yêu cầu kéo có thể được hỗ trợ bởi các giải pháp quản lý kho lưu trữ sản phẩm như Bitbucket Cloud hoặc Bitbucket Server. Xem tài liệu yêu cầu kéo Bitbucket Server để biết ví dụ.

Thí dụ

Sau đây là một ví dụ về loại kịch bản trong đó quy trình phân nhánh tính năng được sử dụng. Kịch bản là một nhóm thực hiện đánh giá mã xung quanh về yêu cầu kéo tính năng mới. Đây là một ví dụ về nhiều mục đích mà mô hình này có thể được sử dụng cho.

Mary bắt đầu một tính năng mới

Quy trình chi nhánh tính năng: thay đổi comit

Trước khi cô bắt đầu phát triển một tính năng, Mary cần một nhánh riêng biệt để làm việc. Cô ấy có thể yêu cầu một chi nhánh mới với lệnh sau:

git checkout -b marys-feature master

Cái này kiểm tra một nhánh được gọi marys-featuredựa trên master,và cờ -b bảo Git tạo nhánh nếu nó không tồn tại. Trên nhánh này, Mary chỉnh sửa, các giai đoạn và cam kết thay đổi theo cách thông thường, xây dựng tính năng của mình với càng nhiều cam kết cần thiết:

git status
git add <some-file>
git commit

Mary đi ăn trưa

Quy trình chi nhánh tính năng: git đẩy

Mary thêm một vài cam kết cho tính năng của mình trong suốt buổi sáng. Trước khi cô ấy đi ăn trưa, bạn nên đẩy chi nhánh tính năng của mình lên kho lưu trữ trung tâm. Điều này phục vụ như một bản sao lưu thuận tiện, nhưng nếu Mary hợp tác với các nhà phát triển khác, điều này cũng sẽ cung cấp cho họ quyền truy cập vào các cam kết ban đầu của cô.

git push -u origin marys-feature

Lệnh này đẩy marys-featuređến kho lưu trữ trung tâm (gốc) và cờ -u thêm nó dưới dạng một nhánh theo dõi từ xa. Sau khi thiết lập nhánh theo dõi, Mary có thể gọi git pushmà không cần bất kỳ tham số nào để đẩy tính năng của mình.

Mary hoàn thành tính năng của mình

 

Quy trình chi nhánh tính năng: Git đẩy

Khi Mary trở về từ bữa trưa, cô ấy đã hoàn thành tính năng của mình. Trước khi hợp nhất nó vào master, cô ấy cần gửi yêu cầu kéo để cho các thành viên còn lại biết rằng cô ấy đã hoàn thành. Nhưng trước tiên, cô nên đảm bảo kho lưu trữ trung tâm có các cam kết gần đây nhất của mình:

git push

Sau đó, cô tập tin theo yêu cầu kéo trong Git GUI cô hỏi sáp nhập marys-featurevào master, và thành viên trong nhóm sẽ được thông báo tự động. Điều tuyệt vời về các yêu cầu kéo là họ hiển thị các bình luận ngay bên cạnh các cam kết liên quan của họ, vì vậy thật dễ dàng để đặt câu hỏi về các thay đổi cụ thể.

Bill nhận được yêu cầu kéo

Quy trình chi nhánh tính năng: Xem lại yêu cầu kéo

Bill nhận được yêu cầu kéo và xem qua marys-feature.Anh ta quyết định muốn thực hiện một vài thay đổi trước khi tích hợp nó vào dự án chính thức, và anh ta và Mary có một vài lần qua lại với yêu cầu kéo.

Mary làm cho những thay đổi

Dòng công việc tính năng: Kéo yêu cầu Sửa đổi

Để thực hiện các thay đổi, Mary sử dụng quy trình chính xác giống như cô đã làm để tạo ra lần lặp đầu tiên cho tính năng của mình. Cô chỉnh sửa, giai đoạn, cam kết và đẩy các bản cập nhật vào kho lưu trữ trung tâm. Tất cả hoạt động của cô ấy xuất hiện trong yêu cầu kéo và Bill vẫn có thể đưa ra nhận xét trên đường đi.

Nếu muốn, Bill có thể marys-featurevào kho lưu trữ tại địa phương và tự mình làm việc. Bất kỳ cam kết nào ông thêm vào cũng sẽ hiển thị trong yêu cầu kéo.

Mary công bố tính năng của mình

Dòng công việc tính năng: Hợp nhất một nhánh tính năng

Khi Bill sẵn sàng chấp nhận yêu cầu kéo, ai đó cần hợp nhất tính năng này vào dự án ổn định (điều này có thể được thực hiện bởi Bill hoặc Mary):

git checkout master
git pull
git pull origin marys-feature
git push

Quá trình này thường dẫn đến một cam kết hợp nhất. Một số nhà phát triển thích điều này bởi vì nó giống như một sự kết hợp mang tính biểu tượng của tính năng với phần còn lại của cơ sở mã. Nhưng, nếu bạn là một phần của lịch sử tuyến tính, có thể khởi động lại tính năng này trên đỉnh của mastertrước khi thực hiện hợp nhất, dẫn đến hợp nhất chuyển tiếp nhanh.

Một số GUI sẽ tự động hóa quy trình chấp nhận yêu cầu kéo bằng cách chạy tất cả các lệnh này chỉ bằng cách nhấp vào nút Chấp nhận điều chỉnh. Nếu bạn không, ít nhất nó có thể tự động đóng yêu cầu kéo khi nhánh tính năng được hợp nhất vàomaster.

Trong khi đó, John đang làm điều tương tự

Trong khi Mary và Bill đang làm việc trên tính năng marys và thảo luận về nó trong yêu cầu kéo của mình, John đang làm điều tương tự chính xác với nhánh tính năng của riêng mình. Bằng cách tách các tính năng thành các nhánh riêng biệt, mọi người có thể làm việc độc lập, tuy nhiên việc chia sẻ các thay đổi với các nhà phát triển khác khi cần thiết vẫn là chuyện nhỏ.

Tóm lược


Trong tài liệu này, chúng tôi đã thảo luận về Quy trình chi nhánh của tính năng Git. Quy trình công việc này giúp tổ chức và theo dõi các chi nhánh tập trung vào các bộ tính năng miền doanh nghiệp. Các quy trình công việc Git khác như Quy trình công việc Git và quy trình công việc Git được tập trung vào repo và có thể tận dụng quy trình công việc chi nhánh Git để quản lý các mô hình phân nhánh của chúng. Tài liệu này đã trình bày một ví dụ mã cấp cao và ví dụ hư cấu để triển khai Quy trình chi nhánh của tính năng Git. Một số liên kết chính để thực hiện với Quy trình chi nhánh tính năng là:

  • tập trung vào các mẫu phân nhánh
  • có thể được thúc đẩy bởi các quy trình công việc định hướng repo khác
  • thúc đẩy sự hợp tác với các thành viên trong nhóm thông qua các yêu cầu kéo và hợp nhất các đánh giá

Việc sử dụng git rebase trong quá trình đánh giá và hợp nhất của một nhánh tính năng sẽ tạo ra một lịch sử Git gắn kết của các tính năng hợp nhất. Một mô hình phân nhánh tính năng là một công cụ tuyệt vời để thúc đẩy sự hợp tác trong môi trường nhóm.

Đi sâu hơn một lần vào quy trình công việc Git bằng cách đọc hướng dẫn toàn diện của chúng tôi về Quy trình công việc Gitflow.

Đăng ký nhận thông báo về những video mới nhất
« Prev: Git: Quy trình công việc tập trung
» Next: Git: Quy trình công việc Gitflow
Copied !!!