为什么Github要把代码合并请求称为pull request而不是push request?

https://stackoverflow.com/que...

我看了这里面的解释,感觉还是不够有说服力啊

我的理解是:我做了一些修改,我请求把我的修改push到你的仓库,然后你review一下我的代码,如果没问题就接受请求merge,这样的话叫做push request岂不是更合适?因为这个操作是我主动发起的。pull是仓库主向我fork的仓库发起的操作,那么pull request这种操作应该是要上游仓库主来向我发起啊,而不是我主动让上游仓库主来pull我仓库中的代码。

阅读 9k
5 个回答

是这样的,这个应该分开来解释。

这个pull指的是权限主体的操作。你提交了代码,但是你没有操作上游repo的权限,你需要上游repo的主人review你的代码,然后把你的代码修改pull到他的repo中去,这是对于pull的解释。

而request则指的是发起主体的操作。也就是说,上游repo的主人虽然有repo的控制权,可以把你的代码更改pull到他自己的repo里,但是他不会主动去pull。而是需要你(发起主体)向上游repo的主人提交申请,也就是request,上游repo的主人才会去响应你的request,也就是执行你所说的review和pull的过程。

所以,pull request的理解方法是:一个通知上游repo所有者拉取代码(pull)请求(request)

在英语中,request一般指的是提交一个申请,需要对方对申请给予答复的。而request之前的修饰词,则是答复方的动作,当然,中文中也是一样。比如“入团申请”,你提交申请之后,需要对方允许你入团你才算是团员。所以,入团的动作不是你主动做的,而是由审核的人把你的名字加上去才算“入团”。同理“pull request”中,request是你提交的,而pull则是对方做的事情。

主动被动你已经分清楚了。

那么其实问题是,pull request是你请求上游仓库来拉取你的代码。而如果用push request就是你force推送代码到上游仓库。

其实这里push和pull并不是说这件事是你主动做的还是被动做的,而是指你的代码是你主动push上去的,还是你的代码被别人pull走的。

换一个写法,xxx request 可以写成 "request for xxx",这样应该会好理解一些。

括号中的 someone 代表省略的部分。

request (someone) for pushpush 的执行者是 "someone",因此这个 "someone" 就是你,因为是你 push 代码。如果是 request (someone) for pull,那这个 pull 执行者就是代码库的所有者,因此就是你请求别人 pull。显然是后者更符合实际情况。

如果用gitlab。那么它的merge request 你应该容易理解的多

你没有权限 push 到别人的代码仓库, 你只能 push 到你的代码仓库, 然后请求别人拉取 (pull) 你的更改.

推荐问题
logo
Microsoft
子站问答
访问
宣传栏