Gerrit 如何实现它的“神奇”引用?
How does Gerrit implement its ‘magical’ refs?
我目前正在实施 Gerrit 作为中央代码审查系统。在试图了解 Gerrit 来龙去脉的过程中,我卡在了下面这句话。摘自Gerrit documentation:
As Gerrit implements the entire SSH and Git server stack within its
own process space, Gerrit maintains complete control over how the
repository is updated, and what responses are sent to the git push
client invoked by the end-user, or by repo upload
. This allows
Gerrit to provide magical refs, such as refs/for/*
for new
change submission and refs/changes/*
for change replacement.
上面的语句是什么意思,特别是这句话:“由于 Gerrit 在其内部实现了整个 SSH 和 Git 服务器堆栈
自己的进程space”?我尝试搜索相关问题,但我找到的最接近的问题是 Why is git push gerrit HEAD:refs/for/master used instead of git push origin master,但它没有充分解释服务器堆栈的实现如何允许 Gerrit 提供神奇的引用。如果之前确实有人问过类似的问题,我们深表歉意。谢谢!
即使在 "normal git" 中实现 魔法引用 也不难。您只需要在您的远程存储库中实现 pre-receive
or update
挂钩即可识别推送的目标分支并对其执行任何操作(例如,将推送存储在另一个分支中)。
虽然我没有任何实现细节(我想它要复杂得多),但这与 Gerrit 的行为相同。您推送到 refs/for/master
并将其存储在 refs/changes/66/5066/2
分支中(例如)。
有some examples.
我目前正在实施 Gerrit 作为中央代码审查系统。在试图了解 Gerrit 来龙去脉的过程中,我卡在了下面这句话。摘自Gerrit documentation:
As Gerrit implements the entire SSH and Git server stack within its own process space, Gerrit maintains complete control over how the repository is updated, and what responses are sent to the
git push
client invoked by the end-user, or byrepo upload
. This allows Gerrit to provide magical refs, such asrefs/for/*
for new change submission andrefs/changes/*
for change replacement.
上面的语句是什么意思,特别是这句话:“由于 Gerrit 在其内部实现了整个 SSH 和 Git 服务器堆栈 自己的进程space”?我尝试搜索相关问题,但我找到的最接近的问题是 Why is git push gerrit HEAD:refs/for/master used instead of git push origin master,但它没有充分解释服务器堆栈的实现如何允许 Gerrit 提供神奇的引用。如果之前确实有人问过类似的问题,我们深表歉意。谢谢!
即使在 "normal git" 中实现 魔法引用 也不难。您只需要在您的远程存储库中实现 pre-receive
or update
挂钩即可识别推送的目标分支并对其执行任何操作(例如,将推送存储在另一个分支中)。
虽然我没有任何实现细节(我想它要复杂得多),但这与 Gerrit 的行为相同。您推送到 refs/for/master
并将其存储在 refs/changes/66/5066/2
分支中(例如)。
有some examples.