Một nhánh chủ đề git là gì?


136

Một nhánh chủ đề git là gì? Nó khác với một chi nhánh bình thường theo một cách nào đó? Có bất kỳ chi nhánh không phải là chi nhánh chủ đề?

Câu trả lời:


113

Các nhánh chủ đề thường là các nhánh nhẹ mà bạn tạo cục bộ và có một tên có ý nghĩa đối với bạn . Chúng là nơi bạn có thể làm việc để sửa lỗi hoặc tính năng (chúng còn được gọi là nhánh tính năng) dự kiến ​​sẽ mất một thời gian để hoàn thành.

Một loại nhánh khác là "nhánh từ xa" hoặc "nhánh theo dõi từ xa". Loại chi nhánh này theo sự phát triển của công việc của người khác và được lưu trữ trong kho lưu trữ của riêng bạn. Bạn định kỳ cập nhật chi nhánh này (sử dụng git fetch) để theo dõi những gì đang xảy ra ở nơi khác. Khi bạn đã sẵn sàng để bắt kịp với những thay đổi của người khác, bạn sẽ sử dụng git pullđể cả tìm nạp và hợp nhất.

Tôi cũng đã thấy một loại nhánh khác về cơ bản là một cây tệp hoàn toàn riêng biệt trong cùng một kho lưu trữ. Ví dụ, kho Git tự chứa đầu tên người đàn ônghtml có chứa nội dung hoàn toàn khác so với tổng chi nhánh. Tôi không biết những loại nhánh này thường được gọi là gì.


6
Tôi đang tìm kiếm làm thế nào để có hai chi nhánh mà không có một cam kết chung của tổ tiên và tìm thấy điều này: madduck.net/blog/ Kẻ
Nicolas

1
Viết cây riêng biệt, tôi tin rằng đôi khi chúng được gọi là một nhánh mồ côi, tương tự như cách Github khuyên bạn nên tạo một trang github bằng tay
tối đa

1
Tại sao bạn nói một nhánh chủ đề phải là địa phương? Không có lý do để nghĩ rằng bạn có thể không muốn đẩy một nhánh chủ đề. Và tương tự, các nhà phát triển khác có thể tạo các nhánh chủ đề của riêng họ và bạn không muốn kéo chúng. Câu trả lời này dường như gây nhầm lẫn hai thuộc tính hoàn toàn không liên quan của các nhánh: liệu một nhánh có cục bộ hay không hoàn toàn không liên quan đến việc nó có phải là một nhánh chủ đề hay không.
Jean-Paul Calderone

@ Jean-PaulCalderone: Tôi không nghĩ rằng tôi nói các nhánh chủ đề phải là địa phương. Tất nhiên, bạn có thể theo dõi một nhánh chủ đề, nếu có nhiều hơn một nhà phát triển làm việc trên đó.
Greg Hewgill

2
Tôi nghĩ rằng câu trả lời ngụ ý nó. Tại sao "... mà bạn tạo cục bộ ..." và "... có một tên có ý nghĩa với bạn." một phần nội tại của những gì tạo nên một "nhánh chủ đề"? Câu đầu tiên trong câu trả lời của bạn cho thấy mạnh mẽ rằng đây là những tính năng quan trọng của nhánh chủ đề nhưng thực ra chúng có trực giao với "chủ đề" của nhánh hay không. Đoạn văn sau nơi bạn mô tả "các nhánh từ xa" tái hiện ý tưởng rằng phần "được tạo cục bộ" của một nhánh chủ đề là quan trọng. Tôi đề nghị tập trung lại câu trả lời này để nhấn mạnh lại những đặc điểm nhánh không liên quan này.
Jean-Paul Calderone

80

Đây không phải là một thuật ngữ kỹ thuật; nó chỉ đề cập đến một nhánh được tạo ra để thực hiện một tính năng cụ thể hoặc sửa lỗi. "Chủ đề" là lý do cho việc tạo ra các chi nhánh, về cơ bản.


2
Vâng. trái ngược với một chi nhánh cá nhân, nơi bạn có các chi nhánh: bob, alice, mat, v.v.
webmat

... vậy nhánh chủ đề và nhánh tính năng là những thứ giống nhau, đúng không?
Betlista

@Betlista Nhiều hay ít, vâng.
mipadi

28

https://github.com/dchelimsky/rspec/wiki/Topic-Branches giải thích điều này tốt:

Chi nhánh chủ đề của Cameron là một nhánh riêng biệt mà bạn sử dụng khi làm việc trên một chủ đề duy nhất của Google (một sửa lỗi, một tính năng mới hoặc một ý tưởng thử nghiệm). Nên làm việc trên một nhánh chủ đề thay vì trực tiếp trên đỉnh của chủ master bởi vì:

{... truy cập liên kết ...}

Vì vậy, vì tất cả những lý do này, nên sử dụng một nhánh chủ đề để chuẩn bị gửi ngay cả đối với những đóng góp đơn giản như lỗi sửa lỗi đơn và tương tự.

Mẫu này cũng cho ví dụ. Điều này thực sự khiến tôi phải suy nghĩ, đây có lẽ là điều mà hầu hết các cửa hàng đã làm. Tất cả các dự án nhanh mà tôi từng làm. Tôi đã ủng hộ "Đây không phải là một thuật ngữ kỹ thuật" bởi vì tôi cảm thấy điều này đập vào đầu đinh.


4

có vẻ như loại nhánh nổi bật và quan trọng nhất không phải là nhánh chủ đề sẽ phát hành nhánh trên kho lưu trữ chính, có sẵn công khai, phải không?

Điều đó có thể phù hợp với bạn, nhưng đó là về bạn và dự án bạn đang nghĩ đến; nó không được xác định bởi Git.

Hầu hết các hệ thống kiểm soát phiên bản (đặc biệt là các hệ thống tập trung) quy định hoặc thực thi một quy trình công việc cụ thể, bao gồm cả những gì hợp lý khi sử dụng một nhánh cho. Git (và ở một mức độ nào đó hầu hết các VCS phân tán) xem xét quy trình công việc đó, các nhánh được sử dụng để làm gì, khi nào cam kết, các repos khác nhau được sử dụng cho mục đích gì, v.v ... đều được người dùng và các thỏa thuận (chính sách) lựa chọn. Vì vậy, Git không thực thi những kỹ thuật này.

Đây là một trong những điều khiến Git khó học. Oliver Steele đã giải thích điều này từ quan điểm của người dùng, viết về Chính sách cam kết .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.