天天看點

【轉】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有差別嗎?

在 GitHub 上混久了,經常聽到 Pull Request,在 GitLab 上混久了,則經常 提起 Merge Request ,然而它們之間有不同嗎?為什麼要用兩個不同的名稱?

要追溯這兩個名稱,需要追溯 GitHub 和 GitLab 引以為傲的 git 工作流。這也是本文參考連結中一定要附上 GitLab 工作流的重要原因。

衆所周知 git 是一個分布式的版本管理系統,但為了團隊成員之間能夠高效地協作,必須有至少一個伺服器用于給團隊所有成員之間同步代碼。而這一點又有點類似于集中式的版本管理。

對于項目的核心成員,集中式版本管理和分布式版本管理貢獻代碼的方式并沒有多大差異(這裡不要糾結個人使用層面的差異,隻談論為倉庫貢獻代碼的方式)。但對于非項目核心成員來說,集中式的版本管理就非常痛苦了,因為他們找不到方式來送出自己的代碼(請忽略低效的發郵件更新檔吧……)。然而分布式版本管理則解決了這個問題:非項目核心成員可以克隆倉庫,這樣就得到了一個自己具有完全讀寫權限的倉庫,貢獻的代碼可以完全同步到這個具有完全讀寫權限的倉庫中。

為了讓非核心成員送出的代碼被核心成員接納,非核心成員會向核心成員提出“申請(Request)”去自己的倉庫指定分支中“拉取(pull)”最新的修改,這便是 Pull Request 的來源。

那麼 Merge Request 又是什麼呢?GitLab 對此的解釋是——一樣的,沒有差別。Merge 隻是在強調最後的那個動作“合并(Merge)”。

  • GitHub、Bitbucket 和碼雲(Gitee.com)選擇 Pull Request 作為這項功能的名稱
  • GitLab 和 Gitorious 選擇 Merge Request 作為這項功能的名稱

舉個可能不那麼貼切的例子:

出門買菜 = PR (強調開始的動作)

下樓買菜 = MR (強調後面的動作)

其實意思都是一樣的