Git 服务器端挂钩,访问执行推送的用户,无需 SSH

Git Server-Side Hook, acces to user doing the pushing, without SSH

我在 Windows 7 x64 上安装了 Git 1.9.5。假设 Git 服务器是 运行 相同的版本和相同的 OS 在同一网络上。有没有办法从预接收或更新服务器端挂钩 访问提交者或作者,而无需 使用 SSH?

据我了解,阅读手册页后,似乎需要 SSH 才能在服务器上设置包含用户名的环境变量。而且预接收和更新挂钩通常只接收来自 stdin 或命令行 argv 的参数,最多接收引用(分支)的名称、推送前引用指向的 SHA-1,以及推送前指向的 SHA-1。用户正在尝试推送。

Git 不处理身份验证 (or authorization for that matter, which is why you have frameworks like gitolite)

因此,除非您有一个侦听器(ssh 甚至 https)在其中设置带有已识别用户 ID 的环境变量,否则挂钩(或任何其他 git 部分)将不知道谁做了什么.

如果您对提交中包含的元数据感到满意,您可以在预接收挂钩中使用类似这样的东西:

#! /bin/sh

while read oldrev newrev refname
do
    author="$(git show --quiet --format="%aN <%aE>" $newrev)"
    committer="$(git show --quiet --format="%cN <%cE>" $newrev)"

    echo "Author: $author Commiter: $committer"
    exit 0
done