在 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 (強調后面的動作)
其實意思都是一樣的