https://stackoverflow.com/que...
Ich habe die Erklärung hier gelesen, aber ich habe immer noch das Gefühl, dass sie nicht überzeugend genug ist
Mein Verständnis ist: Ich habe einige Änderungen vorgenommen und bitte darum, meine Änderungen in Ihr Lager zu übertragen. Wenn es kein Problem gibt, wäre es nicht angemessener, es als a zu bezeichnen Push-Anfrage? Weil diese Operation von mir initiiert wurde. Pull ist ein Vorgang, der vom Warehouse-Eigentümer für mein Forked Warehouse initiiert wird. Daher sollte der Pull-Request-Vorgang vom Upstream-Warehouse-Eigentümer von mir initiiert werden, anstatt dass ich den Upstream-Warehouse-Eigentümer aktiv auffordere, den Code in mein Warehouse zu ziehen.
是这样的,这个应该分开来解释。
这个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则是对方做的事情。
换一个写法,
xxx request
可以写成 "request for xxx",这样应该会好理解一些。括号中的
someone
代表省略的部分。request (someone) for push
,push
的执行者是 "someone",因此这个 "someone" 就是你,因为是你push
代码。如果是request (someone) for pull
,那这个pull
执行者就是代码库的所有者,因此就是你请求别人pull
。显然是后者更符合实际情况。主动被动你已经分清楚了。
那么其实问题是,pull request是你请求上游仓库来拉取你的代码。而如果用push request就是你force推送代码到上游仓库。
其实这里push和pull并不是说这件事是你主动做的还是被动做的,而是指你的代码是你主动push上去的,还是你的代码被别人pull走的。
如果用gitlab。那么它的merge request 你应该容易理解的多