拉请求是Git的一部分,还是GitHub、Gerrit和Atlassian Stash等工具的一项功能?
拉请求似乎是使用Git进行代码审查的常用方法。但是,当使用内置的拉请求是Git的一部分,还是GitHub、Gerrit和Atlassian Stash等工具的一项功能?,git,github,gerrit,pull-request,bitbucket-server,Git,Github,Gerrit,Pull Request,Bitbucket Server,拉请求似乎是使用Git进行代码审查的常用方法。但是,当使用内置的git请求pull或其他工具时,这个术语的含义是否相同尚不清楚 pull请求是Git的固有功能,还是GitHub、Gerrit或Atlassian Stash等工具的通用术语 代码评审的讨论和“结果”是存储在Git提交历史记录中还是存储在单独的数据库中?该命令可用于在本机Git中创建“拉请求”。运行时,Git会生成对项目和Git存储库URL的更改摘要,从中可以提取代码。然后可以将其邮寄到邮件列表或项目维护人员,他们可以将更改拉入自己
git请求pull
或其他工具时,这个术语的含义是否相同尚不清楚
pull请求是Git的固有功能,还是GitHub、Gerrit或Atlassian Stash等工具的通用术语
代码评审的讨论和“结果”是存储在Git提交历史记录中还是存储在单独的数据库中?该命令可用于在本机Git中创建“拉请求”。运行时,Git会生成对项目和Git存储库URL的更改摘要,从中可以提取代码。然后可以将其邮寄到邮件列表或项目维护人员,他们可以将更改拉入自己的存储库
Pro-Git一书中包含了有关
Git-request-pull
命令的更多具体信息。pull-requests是一个简单的概念,它起源于Git创建时,但从那时起被带到了不同的级别
其本质是,您没有对您想要贡献的存储库的推送权限,因此您可以使用fork存储库,制作您的私有副本(一个克隆已经这样做了),然后贡献给该存储库。然后,您要求原始存储库的维护人员引入您的更改。所以你基本上是在提交补丁
正如我所说的,有不同的方法可以做到这一点,但归根结底都是要求维护人员引入您的更改,因此得名。Git最初是为Linux内核创建的,他们一直在使用邮件列表进行开发。所以对他们来说,拉请求实际上是每封电子邮件发送一个补丁;这些补丁实际上是提交对象,由Git的一些普通电子邮件通信工具预先准备好
git request pull
是一个类似的工具,用于生成请求pull请求的消息。但在这种情况下,它更接近拉的想法。虽然补丁可以直接应用,但是由request pull
创建的请求实际上告诉维护人员从不同的远程存储库中提取更改
政府有以下例子:
$ git request-pull origin/master myfork
The following changes since commit 1edee6b1d61823a2de3b09c160d7080b8d1b3a40:
John Smith (1):
added a new function
are available in the git repository at:
git://githost/simplegit.git featureA
Jessica Smith (2):
add limit to log function
change log output to 30 from 25
lib/simplegit.rb | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
因此,它实际上只是一个生成消息以执行底层概念的实用工具
像GitHub这样的其他源代码宿主也做类似的事情。当您在GitHub上创建一个pull请求时,您只需创建一个问题,其中包含维护人员可以在哪里提交的进一步信息。当然,这一切都是在一个网站上,他们可以链接一切多一点,并提供这些一键合并按钮,例如
但基本概念仍然是一样的:要求维护人员引入您所做的一些更改。唯一的区别是该请求的通信方式
其本质是,您没有对您想要贡献的存储库的推送权限,因此您可以使用fork存储库,制作您的私有副本(一个克隆已经这样做了),然后贡献给该存储库
这不再是Git 2.29(2020年第4季度)的唯一选项:
通过“git push
”接受请求的“()”学会了将大部分ref更新外包到新的“proc receive
”hook
参见,,,,(2020年8月27日)作者
(于2020年9月25日合并)
:添加新的proc receive
hook
签字人:姜欣
Git调用内部的execute_commands
函数来处理从客户端发送到Git接收包的命令
无论用户推送什么引用,如果用户具有写权限,Git都会创建或更新相应的引用
没有写入权限的参与者无法直接推送到存储库。
因此,参与者必须将提交写入备用位置,并通过电子邮件或其他方式发送请求。
我们将此工作流称为分布式工作流
在集中式工作流中工作会更方便,就像Gerrit在某些情况下提供的那样
例如,无法直接推送到分支的只读用户可以运行以下()命令将提交推送到伪引用(前缀为“refs/For/
”,而不是“refs/heads/
”),以创建代码审阅
git push origin \
HEAD:refs/for/<branch-name>/<session>
在收到命令后,钩子将执行该命令,并可能创建/更新不同的引用
例如,伪引用“refs/For/master/topic
”的命令可以创建/更新不同的引用,例如“refs/pull/123/head
”
备选参考名称和其他状态在选项行中给出
从“proc receive
”返回的命令列表将替换从用户发送到“receive pack
”的相关命令,“receive pack
”将继续运行“execute\u commands
”功能和其他例程
最后,这些命令的执行结果将报告给最终用户
从“receive pack
”到“send pack
”的报告功能将在后一个提交中扩展,就像“proc receive
”钩子报告“receive pack
”一样
嗨,我看到你引用了这个网站,但是我已经有好几天无法访问这个网站了。“你还能够到它吗?”斯塔克底流说,真奇怪。它对我有用。不过,你可以从源代码中读取它。除了花哨的图案,还是一样的。谢谢,这很有价值!这里也有任何问题的证据:在我看来,几乎像是一些糟糕的DNS缓存。一定有人在看,因为现在我也可以再看一次了。ch5-2太棒了!这让我放心,我昨天想到的基本上是正确的:谢谢你的解释!我想
# Version and features negotiation.
S: PKT-LINE(version=1\0push-options atomic...)
S: flush-pkt
H: PKT-LINE(version=1\0push-options...)
H: flush-pkt
# Send commands from server to the hook.
S: PKT-LINE(<old-oid> <new-oid> <ref>)
S: ... ...
S: flush-pkt
# Send push-options only if the 'push-options' feature is enabled.
S: PKT-LINE(push-option)
S: ... ...
S: flush-pkt
# Receive result from the hook.
# OK, run this command successfully.
H: PKT-LINE(ok <ref>)
# NO, I reject it.
H: PKT-LINE(ng <ref> <reason>)
# Fall through, let 'receive-pack' to execute it.
H: PKT-LINE(ok <ref>)
H: PKT-LINE(option fall-through)
# OK, but has an alternate reference. The alternate reference name
# and other status can be given in options
H: PKT-LINE(ok <ref>)
H: PKT-LINE(option refname <refname>)
H: PKT-LINE(option old-oid <old-oid>)
H: PKT-LINE(option new-oid <new-oid>)
H: PKT-LINE(option forced-update)
H: ... ...
H: flush-pkt