Gerrit服务器如何拦截提交。寻找技术细节

时间:2016-10-11 07:15:39

标签: git server gerrit

我理解Gerrit会收到git提交(或许使用""" WSGI config for ai_labs_blogs project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ """ import os import sys import site site.addsitedir('/var/www/html/.virtualenvs_copy/ai-labs-website-pure-django/local/lib/python2.7/site-packages') sys.path.append('/var/www/html/blogs.ai-labs.co') sys.path.append('/var/www/html/blogs.ai-labs.co/ai_labs_blogs') from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ai_labs_blogs.settings") activate_env=os.path.expanduser("/var/www/html/.virtualenvs_copy/ai-labs-website-pure-django/bin/activate_this.py") execfile(activate_env, dict(__file__=activate_env)) application = get_wsgi_application() 挂钩),然后在某个地方写一个假的ref,直到完成同行评审,但是这个过程在技术实现方面究竟是如何工作的? Git命令涉及什么?

1 个答案:

答案 0 :(得分:2)

您可以引用用户when pushing new commits使用的魔术引用refs/for/<branch ref>

  

要创建新的审核更改,只需使用任何Git客户端工具推送到项目的神奇refs/for/'branch'引用:

git push ssh://sshusername@hostname:29418/projectname HEAD:refs/for/branch
  

E.g。 john.doe可以使用git push为experimental Gerrit服务器上托管的项目kernel/common的{​​{1}}分支上传新的更改:

git.example.com
  

git push客户端上传的每个新提交都将转换为服务器上的更改记录   远程引用git push ssh://john.doe@git.example.com:29418/kernel/common HEAD:refs/for/experimental 实际上并不是由Gerrit创建的,即使客户端的状态消息可能另有说明。

从技术上讲,这是由cmd-receive-pack管理的。

  

由'git push'调用并使用更新项目的存储库   从'git push'结束的信息。

它由gerrit/sshd/commands/Receive.java实施,使用 Git receive-pack protocol 通过SSH接收更改上传。