Câu trả lời:
Có một số cách sử dụng để phân nhánh. Một trong những cách sử dụng phổ biến nhất là để tách các dự án đã từng có cơ sở mã chung. Điều này rất hữu ích để thử nghiệm với mã của bạn mà không ảnh hưởng đến đường trục chính.
Nói chung, bạn sẽ thấy hai loại nhánh:
Chi nhánh tính năng: Nếu một tính năng cụ thể đủ gây rối mà bạn không muốn toàn bộ nhóm phát triển bị ảnh hưởng trong giai đoạn đầu của nó, bạn có thể tạo một chi nhánh để thực hiện công việc này.
Nhánh sửa lỗi: Trong khi tiếp tục phát triển trên thân chính, một nhánh sửa lỗi có thể được tạo để giữ các bản sửa lỗi cho phiên bản mới nhất của phần mềm.
Bạn có thể quan tâm đến việc kiểm tra bài viết sau, giải thích các nguyên tắc phân nhánh và khi nào sử dụng chúng:
Nói chung, mục đích chính của việc phân nhánh (VCS - Hệ thống kiểm soát phiên bản - tính năng) là để đạt được sự cô lập về mã .
Bạn có ít nhất một nhánh, có thể đủ để phát triển tuần tự và được sử dụng cho nhiều tác vụ đang được ghi (cam kết) trên cùng một nhánh duy nhất đó.
Nhưng mô hình đó nhanh chóng cho thấy giới hạn của nó:
Khi bạn có nỗ lực phát triển (tái cấu trúc, tiến hóa, sửa lỗi, ...) và bạn nhận ra rằng bạn không thể thực hiện những thay đổi đó một cách an toàn trong cùng một nhánh với nhánh phát triển hiện tại của bạn (vì bạn sẽ phá vỡ API hoặc giới thiệu mã sẽ bị hỏng mọi thứ), sau đó bạn cần một nhánh khác .
(Để tách biệt mã mới đó cho mã kế thừa, mặc dù hai bộ mã sẽ được hợp nhất sau này)
Vì vậy, đó là câu trả lời của bạn ngay tại đó:
Bạn nên phân nhánh bất cứ khi nào bạn không thể theo đuổi và ghi lại hai nỗ lực phát triển trong một nhánh.
(mà không cần phải duy trì một lịch sử phức tạp khủng khiếp).
Một nhánh có thể hữu ích ngay cả khi bạn là người duy nhất làm việc trên mã nguồn, nếu bạn có nhiều.
Nhưng bạn không nên đặt "một nhánh cho mỗi nhà phát triển":
mục đích "cô lập" được thực hiện để cô lập nỗ lực phát triển (một nhiệm vụ có thể chung chung như "hãy phát triển phiên bản tiếp theo của phần mềm của chúng tôi" hoặc cụ thể như "hãy sửa lỗi 23 "),
không phải để cô lập" tài nguyên " .
(một nhánh có tên "VonC" không có ý nghĩa gì đối với nhà phát triển khác: Điều gì sẽ xảy ra nếu "VonC" rời khỏi dự án? Bạn phải làm gì với nó?
Một nhánh có tên "bugfix_212" có thể được hiểu trong ngữ cảnh của hệ thống theo dõi lỗi chẳng hạn và bất kỳ nhà phát triển nào cũng có thể sử dụng nó với ít nhất một số ý tưởng về những gì anh ta phải làm với nó)
Chi nhánh không phải là một thẻ (SVN là một hệ thống sửa đổi mà cố gắng đề xuất versioning tính năng giống như phân nhánh và gắn thẻ thông qua các thư mục với tập tin bản sao giá rẻ: đó không có nghĩa là thẻ được một chi nhánh)
Để xác định một chi nhánh cũng có nghĩa là xác định một quy trình hợp nhất : bạn cần biết vị trí hợp nhất chi nhánh của mình khi bạn hoàn thành việc này.
Vì vậy, chương 7 của Lực lượng thực hành (Laura WINGERD - O'Reilly) là một phần giới thiệu hay (theo thuyết bất khả tri của VCS) để hợp nhất quy trình làm việc giữa các loại nhánh khác nhau: "" Cách phần mềm phát triển "(pdf)
Nó định nghĩa thuật ngữ codeline (nhánh ghi lại các bước phát triển quan trọng của mã, thông qua các thẻ tại một số điểm nhất định hoặc thông qua hợp nhất quan trọng trở lại nhánh)
Nó giới thiệu mô hình dòng chính (một dòng mã trung tâm để ghi lại các bản phát hành) và mô tả các mục đích khác nhau để phân nhánh:
Các khái niệm thú vị khác xung quanh VCS: Các khái niệm cơ bản
(về ClearCase ban đầu, nhưng cũng có giá trị đối với bất kỳ VCS nào)
Tất cả các SCM của thế kỷ 21 đang nói với bạn:
Phân nhánh cho mọi tác vụ bạn phải làm , bất kể đây là tính năng mới, bản sửa lỗi, thử nghiệm, bất cứ điều gì. Đây được gọi là nhánh chủ đề và nó thay đổi cách bạn làm việc với SCM của mình.
Bạn lấy:
Các công cụ có thể làm điều đó:
Những công cụ KHÔNG THỂ LÀM ĐƯỢC:
Nó cũng phụ thuộc vào công cụ SCM bạn đang sử dụng. Các SCM hiện đại (git, tensurial, v.v.) giúp việc tạo và hủy các nhánh ngày càng dễ dàng bất cứ khi nào cần. Ví dụ, điều này cho phép bạn tạo một nhánh cho mỗi lỗi mà bạn đang xử lý. Khi bạn hợp nhất các kết quả của mình vào thân cây, bạn sẽ loại bỏ nhánh.
Các SCM khác, ví dụ như subversion và CVS, có mô hình phân nhánh "nặng hơn" nhiều. Điều đó có nghĩa là, một nhánh chỉ được coi là thích hợp cho một thứ gì đó lớn hơn một bản vá hai mươi dòng. Ở đó, các nhánh được sử dụng cổ điển để theo dõi toàn bộ quá trình phát triển, như phiên bản sản phẩm trước đó hoặc trong tương lai.
Khi bạn cần thực hiện các thay đổi quan trọng và / hoặc thử nghiệm đối với cơ sở mã của mình, đặc biệt nếu bạn muốn thực hiện các thay đổi trung gian mà không ảnh hưởng đến thân cây.
Nó phụ thuộc vào loại SCM bạn đang sử dụng.
Trong các phiên bản phân phối mới hơn (như git và thương mại), bạn luôn tạo ra các nhánh và vẫn tiếp tục hoạt động. Tôi thường sẽ làm việc trên một nhánh riêng biệt trong một thời gian chỉ vì ai đó đã phá vỡ bản dựng trên đường chính hoặc do mạng ngừng hoạt động và sau đó hợp nhất các thay đổi lại sau khi nó được khắc phục và việc này dễ dàng đến mức không gây khó chịu .
Tài liệu (ngắn và dễ đọc) đã giúp tôi hiểu rõ nhất về những gì đang diễn ra trong hệ thống phân tán là: Hiểu rõ về tinh thần .
Trong các hệ thống cũ hơn với kho lưu trữ trung tâm, (như CVS, SVN và ClearCase), thì đó là một vấn đề nghiêm trọng hơn nhiều cần được quyết định ở cấp độ nhóm và câu trả lời sẽ giống như 'duy trì một bản phát hành cũ trong khi cho phép phát triển để tiếp tục trên dòng chính ', hoặc' như một phần của thử nghiệm lớn '.
Tôi nghĩ rằng mô hình phân tán tốt hơn nhiều và chỉ thiếu các công cụ đồ họa đẹp để trở thành mô hình thống trị. Tuy nhiên, nó không được hiểu rộng rãi và các khái niệm khác nhau, vì vậy nó có thể gây nhầm lẫn cho người dùng mới.
Tôi thấy lời khuyên từ Laura Wingerd & Christopher Seiwald tại Perforce thực sự ngắn gọn và hữu ích:
* Branch only when necessary.
* Don't copy when you mean to branch.
* Branch on incompatible policy.
* Branch late.
* Branch, instead of freeze.
Xem http://www.perforce.com/sites/default/files/pdf/perforce-best-practices.pdf để biết giải thích chi tiết về từng loại và các phương pháp hay nhất khác.
Có nhiều mục đích khác nhau để phân nhánh:
Bất cứ khi nào bạn cảm thấy thích nó.
Bạn có thể sẽ không thường xuyên làm việc với SCM tập trung vì các chi nhánh là một phần của kho lưu trữ chính thức và điều đó không thực sự mời gọi nhiều thử nghiệm, chưa kể đến việc hợp nhất thực sự gây hại.
OTOH, không có sự khác biệt về kỹ thuật giữa chi nhánh và thanh toán trong SCM phân tán và việc hợp nhất dễ dàng hơn rất nhiều. Bạn sẽ cảm thấy muốn phân nhánh nhiều hơn thường xuyên hơn.
Khi bạn cần thực hiện thay đổi, dựa trên nhánh hiện tại của bạn, không dành cho bản phát hành tiếp theo từ nhánh đó (và không phải trước đó).
Ví dụ, chúng tôi thường làm việc trên thân cây. Vào khoảng thời gian phát hành, ai đó sẽ cần thực hiện một thay đổi mà chúng tôi không muốn trong bản phát hành hiện tại (có thể là trước khi phát hành, tại thời điểm này, thường là sau khi phát hành). Đây là lúc chúng ta phân nhánh, để đặt bản phát hành trên nhánh của chính nó và tiếp tục phát triển cho bản phát hành tiếp theo trên thân cây.
Bỏ tất cả các kỹ thuật sang một bên .....
Chi nhánh khi bạn biết sẽ dễ dàng hợp nhất lại!
Hãy nhớ rằng việc hợp nhất sẽ luôn ảnh hưởng đến cách công việc được thực hiện trong một dự án.
Một khi điều này đạt được, tất cả các vấn đề cấp ba khác sẽ xuất hiện.