Kéo yêu cầu so với yêu cầu Hợp nhất


468

Sự khác biệt giữa yêu cầu Kéo và yêu cầu Hợp nhất là gì.

Trong Github, đó là Yêu cầu Kéo và trong GitLab, đó là Yêu cầu Hợp nhất ... Có sự khác biệt nào giữa cả hai điều này không?

Câu trả lời:


765

Tính năng "yêu cầu hợp nhất" của GitLab tương đương với tính năng "yêu cầu kéo" của GitHub . Cả hai đều là phương tiện để kéo các thay đổi từ một chi nhánh khác hoặc rẽ nhánh vào chi nhánh của bạn và hợp nhất các thay đổi với mã hiện tại của bạn. Chúng là những công cụ hữu ích để xem xét mã và quản lý thay đổi.

Một bài viết từ GitLab thảo luận về sự khác biệt trong cách đặt tên cho tính năng:

Hợp nhất hoặc kéo các yêu cầu được tạo trong ứng dụng quản lý git và yêu cầu một người được chỉ định hợp nhất hai nhánh. Các công cụ như GitHub và Bitbucket chọn yêu cầu kéo tên vì hành động thủ công đầu tiên sẽ là kéo nhánh tính năng. Các công cụ như GitLab và Gitorious chọn yêu cầu hợp nhất tên vì đó là hành động cuối cùng được yêu cầu của người được chuyển nhượng. Trong bài viết này, chúng tôi sẽ đề cập đến chúng như là các yêu cầu hợp nhất.

Một "yêu cầu hợp nhất" không nên bị nhầm lẫn với git mergelệnh. Không nên nhầm lẫn "yêu cầu kéo" với git pulllệnh. Cả hai gitlệnh được sử dụng phía sau hậu trường trong cả yêu cầu kéo và yêu cầu hợp nhất, nhưng yêu cầu hợp nhất / kéo đề cập đến một chủ đề rộng hơn nhiều so với chỉ hai lệnh này.


1
GitHub có tạo một nhánh trung gian / tạm thời (vô hình) khi yêu cầu kéo được thực hiện không?
Robert Koritnik

1
@stevemao chúng ta có thể truy cập chúng? Có phải họ thực sự chỉ đọc khi chúng ta có thể giải quyết xung đột về họ?
Robert Koritnik

11
Tôi đang thiếu gì? kéo = tìm nạp + hợp nhất. Nếu hành động cuối cùng là hợp nhất, thì hành động đầu tiên phải được tìm nạp.
Vytenis Bivainis

61
MR chỉ là tên tốt hơn tất cả xung quanh. Pull Request không bao giờ có ý nghĩa với tôi cho đến khi tôi đọc lời giải thích của bạn về nó là hành động đầu tiên, trong khi tôi hiểu Yêu cầu Hợp nhất nghĩa là lần thứ hai tôi đọc nó lần đầu tiên. "xin chào, bạn có thể vui lòng Hợp nhất mã này để làm chủ chi nhánh không?" vs "xin chào, bạn có thể kéo mã này đến nhánh vô hình để <ngụ ý hợp nhất>" - có một người chiến thắng rõ ràng ở đây.
Granitosaurus

7
@Granitosaurus Đồng ý. Là người mới bắt đầu git, các yêu cầu kéo hoàn toàn không phải là những gì tôi mong đợi. Khi tôi bắt đầu sử dụng Gitlab, hợp nhất các yêu cầu có ý nghĩa ngay lập tức.
Mark Lyons

54

Chúng là cùng một tính năng

Hợp nhất hoặc kéo các yêu cầu được tạo trong ứng dụng quản lý git và yêu cầu một người được chỉ định hợp nhất hai nhánh. Các công cụ như GitHub và Bitbucket chọn yêu cầu kéo tên vì hành động thủ công đầu tiên sẽ là kéo nhánh tính năng. Các công cụ như GitLab và Gitorious chọn yêu cầu hợp nhất tên vì đó là hành động cuối cùng được yêu cầu của người được chuyển nhượng. Trong bài viết này, chúng tôi sẽ đề cập đến chúng như là các yêu cầu hợp nhất.

- https://about.gitlab.com/2014/09/29/gitlab-flow/


không nên hợp nhất là trách nhiệm của nhà phát triển đang thêm một tính năng mới? nếu nhà phát triển A thêm một tính năng trong Feature_branch, anh ta nên lấy nhánh chính và hợp nhất nó với nhánh của mình để giải quyết tất cả các xung đột và kiểm tra nó trước khi tạo yêu cầu hợp nhất?
Ciasto piekarz

2
Có nhưng vẫn còn một sự hợp nhất nhanh chóng mà ai đó phải được thực hiện sau đó để có được mã để làm chủ. Và thực sự tôi nghĩ rằng trong một nhóm các nhà phát triển toàn thời gian có lẽ tốt nhất nếu nhà phát triển tính năng này cũng hợp nhất, nhưng có thể hữu ích cho họ khi chờ ai đó xem xét PR của họ trước.
bdsl

21

Theo quan điểm của tôi, chúng có nghĩa là cùng một hoạt động nhưng từ những quan điểm khác nhau:

Nghĩ về điều đó, Alice thực hiện một số cam kết trên kho A, được chia từ kho B. của Bob.

Khi Alice muốn "hợp nhất" các thay đổi của mình thành B, cô thực sự muốn Bob "kéo" những thay đổi này từ A.

Do đó, theo quan điểm của Alice, đó là một "yêu cầu hợp nhất", trong khi Bob xem đó là "yêu cầu kéo".


Nó làm tôi nhớ đến ví dụ khi tôi làm báo cáo nhỏ để cho các đồng nghiệp khác biết cách hoạt động của git.
Ravi Yadav

4

Có một sự khác biệt tinh tế về mặt quản lý xung đột. Trong trường hợp có xung đột, yêu cầu kéo trong Github sẽ dẫn đến một cam kết hợp nhất trên nhánh đích . Trong Gitlab, khi tìm thấy xung đột, các sửa đổi được thực hiện sẽ nằm trên một cam kết hợp nhất trên nhánh nguồn .

Xem https://docs.gitlab.com/ee/user/project/merge_Vquests/resolve_conflicts.html

"GitLab giải quyết xung đột bằng cách tạo một cam kết hợp nhất trong nhánh nguồn không được tự động sáp nhập vào nhánh đích. Điều này cho phép cam kết hợp nhất được xem xét và kiểm tra trước khi các thay đổi được hợp nhất, ngăn các thay đổi ngoài ý muốn xâm nhập vào nhánh đích mà không xem xét hoặc phá vỡ tòa nhà."


3

GitLab 12.1 (tháng 7 năm 2019) giới thiệu một sự khác biệt:

" Hợp nhất các yêu cầu cho các vấn đề bí mật "

Khi thảo luận, lập kế hoạch và giải quyết các vấn đề bí mật, chẳng hạn như các lỗ hổng bảo mật, có thể đặc biệt khó khăn đối với các dự án nguồn mở để duy trì hiệu quả do kho lưu trữ Git được công khai.

https://about.gitlab.com/images/12_1/mr-confquil.png

Kể từ ngày 12.1, giờ đây các vấn đề bí mật trong dự án công cộng có thể được giải quyết trong quy trình làm việc hợp lý bằng nút Tạo yêu cầu hợp nhất bí mật, giúp bạn tạo yêu cầu hợp nhất trong một ngã ba riêng của dự án.

Xem " Vấn đề bí mật " từ vấn đề 58583 .

Một tính năng tương tự tồn tại trong GitHub, nhưng liên quan đến việc tạo ra một ngã ba riêng đặc biệt, được gọi là " tư vấn bảo mật người bảo trì ".


0

Như đã đề cập trong các câu trả lời trước, cả hai đều phục vụ gần như cùng một mục đích. Cá nhân tôi thích git rebase và hợp nhất yêu cầu (như trong gitlab). Nó giảm gánh nặng cho người đánh giá / người bảo trì, đảm bảo rằng trong khi thêm yêu cầu hợp nhất, nhánh tính năng bao gồm tất cả các cam kết mới nhất được thực hiện trên nhánh chính sau khi nhánh tính năng được tạo. Dưới đây là một bài viết rất hữu ích giải thích chi tiết về rebase: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

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.