我需要为大型内部开发人员团队建立一个集中的git存储库.
我需要一些令人信服的机制,允许我将给定的提交追溯回用户.据我对这个问题的理解,这可能不是真正的git-authors.我不希望被使用该信息的任何东西(除了满足可追溯性内部要求除外).将提交与客户端的IP地址相关联被认为足够可靠,因此它并不是非常严格.Grepping日志文件是可以接受的,但我期待相当并发的提交.
有什么建议我怎么能做到这一点?我故意在这里尝试解决方案类型(ssh,git-server,apache)
(是的,如果"joe"推动他从"osama"获取的更改,那么joe会在提交前阅读此代码)
你可以通过post-receive钩子实现这一点.这个示例钩子只回显可能记录到推送用户的可能细节,但可以通过syslog或某种专用的登录机制记录详细信息.
# sample logging post-receive hook echo This hook logs back to the pusher, but could append to syslog or something. echo push from user $LOGNAME at $(date), ssh client details: $SSH_CLIENT echo refs updated: echo ------------- cat echo -------------
为了使SSH_CLIENT
细节准确,您可能希望确保用户没有直接shell访问权限,否则他们可以通过ssh获取shell,然后欺骗他们LOGNAME
和SSH_CLIENT
信息,尽管这种捏造是恶意的并且让恶意用户推送访问权限一个git存储库本质上是危险的.有更可靠的方法来确定用户身份,但如果用户可以控制登录脚本,那么当钩子作为登录用户运行时,他们总是有可能以一种方式操纵它以颠覆钩工作.
通过这种方式,您可以更改每个分支的from和to commit SHA1.为了确保您可以随时轻松地检查你可能还需要确保在配置变量的历史receive.denyDeletes
和received.denyNonFastForwards
被设置为true.再次,为了拒绝摆弄这些配置,您希望避免用户具有对存储库的shell访问权限.
如果您不介意非快速转发或分支删除,您仍然可以访问尚未通过reflog修剪的旧提交,只要这些提交通过core.logAllRefUpdates
.