我已经设置了 gitlist + apache + basic auth + git-http-backend,并且 git 存储库的 web 显示和 git clone 都工作正常。
但是,对于提交的代码,我想在 apache 身份验证期间使用用户名作为作者姓名(或提交者姓名)。
原因是,有时工程师会直接在测试服务器上进行临时补丁,并在补丁完成后将代码推送回 git。因此,现在所有补丁都共享相同的作者姓名,这很难检查(或指责)。
请问对此有何建议?多谢。
我已经设置了 gitlist + apache + basic auth + git-http-backend,并且 git 存储库的 web 显示和 git clone 都工作正常。
但是,对于提交的代码,我想在 apache 身份验证期间使用用户名作为作者姓名(或提交者姓名)。
原因是,有时工程师会直接在测试服务器上进行临时补丁,并在补丁完成后将代码推送回 git。因此,现在所有补丁都共享相同的作者姓名,这很难检查(或指责)。
请问对此有何建议?多谢。
所以经过一些进一步的研究,这是我到目前为止所得到的。
事实上,git 的钩子(例如 pre-receive 和 post-receive)确实收集了 apache 身份验证的用户名,作为 shell 变量${REMOTE_USER}
或${GIT_COMMITTER_NAME}
.
然而它并没有太大帮助,因为在钩子中更改提交的作者姓名似乎非常困难(这似乎是合理的)。使用一些技巧,我可以确保我的票务系统 (Trac) 使用 apache 用户,但这可能会导致更多的混乱。
现在,我只是在 pre-receive 钩子中添加一些检查,以便每个提交的作者应该匹配 git 系统中的用户列表。如果不是,则拒绝推送,用户需要使用 rebase 修改回作者。
因此,除非工程师明确使用他人的合法作者姓名,否则他应始终尝试使用自己的登录名提交更改。
从长远来看,我相信每个工程师确实应该有自己的账户,正如 Vonc 所描述的那样,这会让事情变得更加清晰。
当我直接在服务器上进行修改时,我会封装git
一个自定义脚本 ( wgit
),它会强制用户选择一个别名,例如:
alias agitVoncGitHub='alias git="${H}/sbin/wgit u VonC,vonc@laposte.net,github.com"'
这意味着 agit xxx
将实际调用:
sbin/wgit u VonC,vonc@laposte.net,github.com xxx
如果wgit
(默认别名git
)单独使用,则会显示错误消息:
echo type alias and choose the right agitxx to activate in order for your git to identify yourself
exit 1
前两个参数定义了用户名和电子邮件,它们将被重用于修改 Git 环境变量:
# 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
这使我可以在提示符中添加一条始终显示您身份的消息(对于任何 git 命令):
echo -e "[ \E[34;47m$GIT_AUTHOR_NAME,$GIT_AUTHOR_EMAIL for $machine\033[0m ]"
nextcmd=${gitcmd[0]}
如果您确实需要绕过该身份验证部分,可以在命令xxgit
前添加一个变量git
:
xxgit=1 git ...
git ...
即使您没有选择别名来标识自己,该命令也将起作用。