Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git服务器存储库中实现可跟踪性?_Git - Fatal编程技术网

如何在git服务器存储库中实现可跟踪性?

如何在git服务器存储库中实现可跟踪性?,git,Git,我需要为一个大型的内部开发团队建立一个集中的git存储库 我需要一些令人信服的机制,允许我将给定的提交回溯到用户。据我所知,这可能不是真正的git作者。我不希望将此信息用于任何事情(除了满足内部可追溯性要求)。将提交与客户机的IP地址相关联被认为是足够可靠的,因此它并不严格。将日志文件变灰是可以接受的,但我希望相当多的并发提交 有什么建议我可以做到这一点吗?在这里,我故意尝试对解决方案类型(ssh、git服务器、apache)开放 (是的,如果“joe”推送他从“osama”获取的更改,那么jo

我需要为一个大型的内部开发团队建立一个集中的git存储库

我需要一些令人信服的机制,允许我将给定的提交回溯到用户。据我所知,这可能不是真正的git作者。我不希望将此信息用于任何事情(除了满足内部可追溯性要求)。将提交与客户机的IP地址相关联被认为是足够可靠的,因此它并不严格。将日志文件变灰是可以接受的,但我希望相当多的并发提交

有什么建议我可以做到这一点吗?在这里,我故意尝试对解决方案类型(ssh、git服务器、apache)开放


(是的,如果“joe”推送他从“osama”获取的更改,那么joe将在提交之前阅读此代码)

设置一个。您将拥有旧的和新的提交ID以及ref名称。将此与提交者的IP关联可能需要追溯到您的父PID,直到您到达sshd,或者您可以只记录当前用户的用户名。

您可以通过post接收挂钩实现这一点。这个示例钩子只是回显可能记录给推送用户的详细信息,但是可以通过syslog或某种专用的loggin机制记录详细信息

# 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_客户端
的详细信息准确无误,您可能需要确保用户没有直接的shell访问权限,否则他们可以通过SSH获得shell,然后欺骗他们的
LOGNAME
SSH_客户端
信息,尽管这样的捏造是恶意的,并且让恶意用户推送访问git存储库本身就是危险的。有更可靠的方法来确定用户身份,但是如果用户控制了这些登录脚本,那么当钩子以登录用户的身份运行时,他们总是有可能以某种方式操纵钩子来破坏钩子的工作方式

通过这种方式,您可以为每个更改的分支获取from和commit SHA1。为了确保始终可以轻松检查历史记录,您可能还希望确保配置变量
receive.denyDeletes
received.denynonfastfrowards
设置为true。同样,要拒绝篡改这些配置,您需要避免用户具有对存储库的shell访问权限


如果您不介意非快进或分支删除,您仍然可以访问未通过reflogs修剪的旧提交,只要通过
core.logAllRefUpdates启用这些提交就行了。正是我需要的。