Câu trả lời:
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 merge
lệnh. Không nên nhầm lẫn "yêu cầu kéo" với git pull
lệnh. Cả hai git
lệ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.
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.
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".
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à."
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.
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ì ".
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