使用apache basic auth user作为git作者

时间:2014-07-23 06:12:16

标签: git apache authentication gitlist

我已经设置了gitlist + apache + basic auth + git-http-backend,git存储库的web显示和git clone都运行良好。

但是,对于已提交的代码,我希望在apache身份验证期间使用用户名作为作者姓名(或提交者名称)。

原因是,有时工程师会直接在测试服务器上进行临时修补,并在修补程序完成后将代码推送回git。因此,现在所有补丁共享相同的作者名称,这很难检查(或责备)。

对此有任何建议吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

当我直接在服务器上进行修改时,我将git包裹在custom script (wgit)中,强制用户choose an alias如下:

alias agitVoncGitHub='alias git="${H}/sbin/wgit u VonC,vonc@laposte.net,github.com"'

这意味着git xxx实际上会调用:

sbin/wgit u VonC,vonc@laposte.net,github.com xxx

如果单独使用wgitgit的默认别名),则error message is displayed

echo type alias and choose the right agitxx to activate in order for your git to identify yourself
exit 1

two first parameters定义了一个用户名和电子邮件,将重复用于modify the Git environment variables

# if parent shell had already set authentication variables, nothing to do: commit will be correctly signed-off
if [[ ! ( $GIT_AUTHOR_NAME && $GIT_AUTHOR_EMAIL && $GIT_COMMITTER_NAME && $GIT_COMMITTER_EMAIL ) ]]
then
  export GIT_AUTHOR_NAME=$username
  export GIT_COMMITTER_NAME=$username
  export GIT_AUTHOR_EMAIL=$email
  export GIT_COMMITTER_EMAIL=$email
fi

这允许我add to the prompt a message始终显示(对于任何git命令)你是谁:

echo -e "[ \E[34;47m$GIT_AUTHOR_NAME,$GIT_AUTHOR_EMAIL for $machine\033[0m ]"
nextcmd=${gitcmd[0]}

如果确实需要绕过该身份验证部分,you can add an xxgit variable in front of your git command

xxgit=1 git ...

即使你没有选择别名来识别自己,git ...命令也会有效。

答案 1 :(得分:0)

经过一些进一步的研究,这是我到目前为止所得到的。

  1. 事实上,git的钩子(例如预接收和后接收)确实收集了apache身份验证的用户名,作为shell变量${REMOTE_USER}${GIT_COMMITTER_NAME}

  2. 然而它并没有多大帮助,因为在钩子里改变提交的作者名称似乎很难(这似乎是合理的)。使用一些黑客,我可以确保我的票证系统(Trac)使用apache用户,但这可能会引起更多的混淆。

  3. 现在,我只想在预接收挂钩中添加一些检查,这样每个提交的作者应该与git系统内的用户列表匹配。如果不是,则拒绝推送,并且用户需要使用rebase修改作者。

  4. 因此,除非工程师明确使用他人的合法作者姓名,否则他应该总是尝试使用自己的登录名来提交更改。

  5. 从长远来看,我相信每个工程师都应该拥有自己的帐户,如Vonc所描述的那样,这会让事情变得更加清晰。