我正在为项目使用git和Codebase。
我刚做了一个测试,我能够使用不同的电子邮件地址和名称集来提交git存储库,这会导致它将提交标记为由不同的用户。我将它推送到存储库,它显示为该用户已经提交,即使它是我。
有没有办法阻止用户提交或推送其他人的用户详细信息(实际上他们不能“伪造”提交来自不同的用户)?
修改
我认为这种身份验证需要在将提交提交到服务器的阶段进行,因为在本地工作副本中它只是一个用户可以完全访问的存储库,可以随心所欲地执行任何操作。因此,我应该问Codebase关于可能吗?
编辑2:
根据要求进行Git配置:
(回购/的.git /配置)
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@codebasehq.com:<redacted company name>/<redacted project name>/test.git
[branch "master"]
remote = origin
merge = refs/heads/master
答案 0 :(得分:3)
Ooops :虽然这是一种有效的技术,但它假设您可以有效地完全控制服务器。如果您正在使用托管解决方案,则所有投注均已关闭。
您可以在存储库的update
挂钩中验证作者姓名和电子邮件。你可以得到这样的两个值:
#!/bin/sh
set -- refname sha1_old sha1_new
author_name=$(git log --pretty=format:%an $sha1_new)
author_email=$(git log --pretty=format:%ae $sha1_new)
当然,诀窍在于弄清楚这些是否有效。这是一招:
您可以使用ssh配置中的command=""
选项创建一个包围git-receive-pack
的包装器,将ssh键映射到作者信息。例如,像这样:
#!/bin/sh
GV_AUTHOR_NAME="$1"
GV_AUTHOR_EMAIL="$2"
export GV_AUTHOR_EMAIL GV_AUTHOR_NAME
eval exec $SSH_ORIGINAL_COMMAND
你会使用这样的authorized_keys
行:
command="~/bin/gitvalidator 'Lars Kellogg-Stedman' 'lars@seas.harvard.edu'" ssh-rsa ...
所有这一切的结果是您的update
脚本将具有可用的环境变量GV_AUTHOR_NAME
和GV_AUTHOR_EMAIL
,并且可以针对提交检查这些并且如果它们没有错误则退出不匹配。
答案 1 :(得分:-3)
很抱歉,在我提交最新更新之前,我的帖子已被删除:
当您拥有凭据时,您可以像其他人一样提交。
为了澄清,您要问的情况如下:
用户Foo和Bar可以提交回购。您希望阻止用户Foo以用户Bar的身份提交到repo。
在这种情况下,用户Bar必须保护他们的私有SSH密钥,就像他们保护密码一样。因为它用于验证您的提交。